- 浏览: 724841 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1081)
- [网站分类]1.首页原创精华.NET区(包含架构设计、设计模式)(对首页文章的要求:原创、高质量、经过认真思考并精心写作) (0)
- [网站分类]2..NET新手区(用于发表不合适发表在首页的.NET技术文章,包括小经验、小技巧) (1)
- [网站分类]3.非技术区(技术之外的文章,但不要涉及任何政治内容) (0)
- [网站分类]4.其他技术区 (0)
- [网站分类]5.企业信息化 (0)
- [网站分类]6.读书心得区(技术书籍阅读心得、书籍推荐) (0)
- [网站分类]7.提问区(.NET技术方面的提问) (2)
- [网站分类]8.技术转载区(.NET技术文章转载, 请注明原文出处) (0)
- [网站分类]9.求职招聘区(个人求职、企业招聘) (0)
- [网站分类]Dottext区 (0)
- [网站分类]GIS技术 (0)
- [网站分类]IT英才专区(IT职场交流) (0)
- [网站分类]SharePoint (0)
- [网站分类]博客园.NET俱乐部(俱乐部组织与活动方面的文章) (0)
- [网站分类]软件发布区(发布自己开发的代码、软件) (0)
- [网站分类]网站管理区(网站管理方面的疑问、建议、意见, 寻求管理员帮助) (0)
- [网站分类]业界新闻 (1)
- 技术 (1)
- [随笔分类]生活感悟 (10)
- [随笔分类]C# (30)
- [随笔分类]AjaxPro教程 (3)
- [发布至博客园首页] (5)
- [随笔分类]简历 (0)
- [随笔分类]Linux (2)
- [随笔分类]技术聚会 (2)
- [随笔分类]ORM (1)
- [随笔分类]php (1)
- [随笔分类]创业 (1)
- [随笔分类]奇技淫巧 (1)
- [随笔分类]计划 (1)
- [随笔分类]架构&分层 (1)
- [随笔分类]整合行销 (1)
- [随笔分类]mac (1)
- [网站分类].NET新手区 (45)
- [网站分类]非技术区 (5)
- [网站分类]招聘区 (0)
- [随笔分类]单元测试 (1)
- [网站分类]其他技术区 (3)
- [网站分类]代码与软件发布 (6)
- [网站分类]提问区 (24)
- [随笔分类]ASP.NET (2)
- [随笔分类]FAQ (12)
- [随笔分类]开发人员工具 (1)
- [随笔分类]朗志轻量级项目管理解决方案 (1)
- [网站分类]读书区 (1)
最新评论
-
天使建站:
写和乱七八糟的 不知道从哪复制过来的 还是看这里吧j ...
jquery数组 -
hyn450:
你好,我最近也想了解一下竞争情报。不知道能不能交流一下呢 ?
最近的工作 -
lattimore:
这个连接打不开了阿!
使用vnc连ubuntu desktop -
MZhangShao:
奉劝你一句,以后在Ubuntu 用apt-get安装成功的软件 ...
关于xrdp的安装设置 -
f002489:
strftime
python下datetime类型的转换
目录
说明:
由于关于XML的知识有较多的学习资料,又鉴于本人的知识实在有限,所以本文旨在将我前一段在工作中遇到的问题和积累的一些经验和大家分享一下。
什么是XML:
XML(Extensible Markup Language)是可扩展标记语言的缩写,它是由W3C工作组定义的一种标记语言。
-
XML的优点:
-
平台无关性:
XML独立于具体的操作平台和应用系统,具有很强的可重用性。
-
灵活性:
XML提供了一种结构化的数据表示方式,并将文档结构于显示内容分开。此外,XML还允许各种不同的专业与自己的特定领域有关的标记语言,使数据从描述和过程中分离出来。
-
开放性:
XML允许以最合适的输出格式好用于应用程序的格式来传递内容。只要应用程序都支持XML,就可以在程序间无缝的交换数据。
-
可扩展性:
允许用户创建自己的可被用于应用程序的可扩展的标志集,描述的精度可以由用户自己定义。
-
3.5 信息传输的便捷性:
XML的数据是完全基于文档的,传输速度快,并且几乎所有的系统都能接收和理解XML数据。
4 使用C# 对XML进行操作心得
C#为操作XML数据提供了相当多简单易行的方法,而且也有XML与数据库间直接转换的方法,但是由于是第一次接触这方面的知识,为了更加熟悉有关XML的基本知识,所以我采用的是最为基础的循环读元素和属性的方法。
这次的系统的表间关系相对比较复杂,对操作的限制也比较大。另外这次使用的XML文档格式是用属性来存储数据,而与大多数书籍上的参考资料不同,这些给我带来了一些干扰。个人认为两种存储方法各有优点,用属性存储数据给人感觉比较简洁,但数据间关系不够清晰,而且操作比较繁琐。而以元素形式存储则略显臃肿。
在实际操作中,我使用的是XMLReader类的派生类XMLTextReader类读取XML文档中的数据,其中提取了一些我认为常用的属性和方法:
属性/方法 |
|
AttributeCount |
当前结点上的属性数 |
Name |
结点或属性名 |
Value |
结点或属性值 |
has Attribute |
当前结点是否有属性,true或false |
GetAttribute() |
获得属性值 |
Read( ) |
读取下一结点 |
MoveToAttribute() |
移动的指定结点 |
MoveToNextAttribute() |
移动到下一结点 |
在功能的实现方面,我使用的是最原始的while循环嵌套加if判断的方式确保循环到每一层、每一结点及每一属性,并生成sql语句完成数据库操作,感觉上代码比较臃肿,并且方法比较原始笨拙,但对XML的相关知识理解有了进一步加深。
个人理解,由于XML灵活性,可以自己定义标签的名称,这就为对其操作带来了很多简洁而灵活的方法,在深刻了解了XML文档结构后对操作代码进行重构,可以极大的减少代码量,提高可读性。
由于看到了使用的方法比较原始而且可读性不高,我也在积极的修改代码,争取应用C#类库中比较简单实用的类和方法,改善代码,提高可读性。
5 代码示例
<?xml version="1.0" encoding="utf-8"?>
<Databases>
<Database Name="aa" CheckinTime="" UpdateTime="" version="" />
<Tables>
<Table Name="aaa1" CheckinTime="" UpdateTime="" version="" />
<Columns>
<Column Name="aaa1a" CheckinTime="" UpdateTime="" version="" />
</Columns>
<Table Name="aaa2" CheckinTime="" UpdateTime="" version="" />
<Columns>
<Column Name="aaa2a" CheckinTime="" UpdateTime="" version="" />
</Columns>
</Tables>
</Databases>
以上是一段简单的XML文档,我们需要按照Database—>Table—>Column的顺序逐层的遍历所有数据。
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
namespace _
{
class Program
{
static void Main(string[] args)
{
XmlTextReader rd = new XmlTextReader("C:\\Documents and Settings\\Administrator.D4D1C4378A72451\\桌面\\1.xml"); //读取指定路径的文件
rd.WhitespaceHandling = WhitespaceHandling.None;
while (rd.Read()) //最外层循环,遍历所有Database
{
if (rd.Name != "Database") //找到首个Database结点
continue;
for (int i = 0; i < rd.Depth; i++)
{
Console.Write("\t");
}
Console.Write("<");
for (int i = 0; i < rd.AttributeCount; i++)
{
Console.Write("{0}='{1}'", rd.Name, rd.GetAttribute(i));
}
Console.WriteLine("/>");
while (rd.Read() && !(rd.NodeType == XmlNodeType.EndElement && rd.Name == "Tables")) //遍历提取所有的Table中的数据
{
if (rd.Name != "Table")
continue;
for (int i = 0; i < rd.Depth; i++)
{
Console.Write("\t");
}
Console.Write("<");
for (int i = 0; i < rd.AttributeCount; i++)
{
Console.Write("{0}='{1}'", rd.Name, rd.GetAttribute(i));
}
Console.WriteLine("/>");
while (rd.Read() && !(rd.NodeType == XmlNodeType.EndElement && rd.Name == "Columns")) //遍历提取所有的Column中的数据
{
if (rd.Name != "Column")
continue;
for (int i = 0; i < rd.Depth; i++)
{
Console.Write("\t");
}
Console.Write("<");
for (int i = 0; i < rd.AttributeCount; i++)
{
Console.Write("{0}='{1}'", rd.Name, rd.GetAttribute(i));
}
Console.WriteLine("/>");
}
}
}
}
}
}
这是一段遍历上面XML文档的代码,运行结果如下图。提取了所有数据,便可以进行更新数据库。
发表评论
-
请教一个winform程序设计上的问题
2007-07-12 02:22 705想要做一个功能,点击按钮出现一个键菜单,如下图所示:而在我的程 ... -
模拟提交程序相关专题
2007-11-29 18:53 963目录 模拟提交程序相关专题 1 目录 ... -
如何使用树形控件
2007-11-29 18:58 1353目录 如何使用树形控件 1 目录 2 ... -
自制线程池3续
2008-08-13 13:59 651晚上睡觉前想到一些问题,发现有几种情形没有进行测试,遂记录下来 ... -
刚才是不是访问出问题了
2008-08-14 20:08 637Invalid URL The requested URL & ... -
Mock介绍
2008-08-17 19:48 1039在园子里搜索了一下, ... -
单元测试介绍
2008-08-18 07:25 734希望能不落熟套,在这里记录单元测试使用中的一些技巧 1.刚从英 ... -
最近几天的工作总结
2008-08-21 16:29 663缓存真的很重要,这几天在做信息采集的过程中,需要动态的生成程序 ... -
BDB使用总结
2008-08-24 12:26 729当对数据库设置了DbFlags.Dup后,允许重复的键值, 当 ... -
截图留念
2008-08-28 20:57 376... -
分布式信息采集程序Preview2
2008-08-29 17:17 604http://files.cnblogs.com/lexus/ ... -
boo & python笔记
2008-08-30 21:22 588在这里记录一下,自己的复习所得,有大概一个月没有碰这些东西了, ... -
log4net udp组件的应用
2008-08-30 23:57 759由于输出的调试信息非常之多,加上早前有一些用的是Console ... -
检测你的机子上装了什么版本的.net framework
2009-12-09 09:20 699这个想法由来已久,今天又碰上有人问我这个问题,使出吃奶的劲尔狠 ... -
关于程序日志的设计思考,及写程序时候的心态2009-12-16
2009-12-16 10:00 864最近在写一个分布式缓 ... -
最近几天的工作总结
2008-08-21 16:29 775缓存真的很重要,这几天在做信息采集的过程中,需要动态的生成程序 ... -
BDBViewer
2008-08-23 10:37 590因为项目中用了BDB,可是BDB不像sqlite有众多的数据库 ... -
扩展方法应用
2008-08-23 16:26 711using System; using System.Coll ... -
BDB使用总结
2008-08-24 12:26 748当对数据库设置了DbFlags.Dup后,允许重复的键值, 当 ... -
目前来说比较.net下最好的bdb操作封装(附单元测试)
2008-08-24 15:41 7581using System; 2using Syste ...
相关推荐
XML Parser是用于解析XML文档的工具,常见的XML Parser包括: * MSXML Parser:为Microsoft内建于Internet Explorer的XML剖析器 * Apache Xerces:为Java语言预设使用的XML剖析器 * Oracle XML Parser:为Oracle...
XML-RPC使得运行在不同操作系统上的应用程序能够通过网络互相通信并共享功能。这种协议的主要优势在于其简单性、跨平台能力和广泛的支持。 #### 二、XML-RPC客户端详解 在了解XML-RPC客户端之前,我们先来了解一下...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件以及软件的本地化等场景。TINYXML是一个轻量级的C++库,它提供了读写XML文档的能力,适合在资源有限或者对性能要求不高的...
XML 学习心得 XML(Extensible Markup Language)是标准通用标记语言的子集,用于标记电子文件,使其具有结构性的标记语言。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。...
在处理XML文件时,有时我们可能会遇到由于XML文档包含了对外部DTD(Document Type Definition)的引用,导致在使用`XmlDocument`或`XmlDataDocument`类加载文件时出现验证异常。DTD是XML的一个组成部分,用于定义XML...
MSXML是微软提供的一系列接口,用于解析、操作和创建XML文档。 读取XML文件在VS2008中主要涉及以下步骤: 1. 引入MSXML库:首先,在C++或VB.NET项目中,需要添加对MSXML库的引用。对于C++,这通常意味着包含头文件...
接下来,源代码部分可能涉及到如何解析和操作XML文档。在Java、Python或.NET等编程环境中,都有专门处理XML的库。例如,Java中的JAXB(Java Architecture for XML Binding)可以将XML数据绑定到Java对象,方便读写...
XML文档的结构必须严格遵循规则,例如所有元素都必须正确关闭,属性值必须用引号包围,元素命名遵循特定的命名规则等。XML解析器会检查这些规则,如果发现错误,文档将被认为是无效的。 XML的应用广泛,可以用于...
XML文档由一系列元素构成,每个元素都有自己的开始标签和结束标签,如`<element>`和`</element>`,可以嵌套并包含属性,以增加数据的描述性。 DTD(Document Type Definition)是XML的一个关键概念,它定义了XML...
DTD是"有效XML文档"的必须文件,我们通过DTD文件来定义文档中元素和标识的规则及相互关系。如何建立一个DTD文件呢?让我们一起来学习: 1.设置元素 元素是XML文档的基本组成部分。你要在DTD中定义一个元素,然后...
- **理解CSS与XSL在处理XML数据时的不同之处**:CSS更侧重于样式的表现,而XSL则是一种用于转换XML文档结构的强大工具。 - **掌握CSS的基本语法及其在显示XML数据时的应用方法**。 - **掌握XSL的基本语法及其在转换...
DOM · 第三章:XML的术语 · 导言 · 一.XML文档的有关术语 · 二.DTD的有关术语 · 第四章:XML的语法 · 一.XML语法规则 · 二.元素的语法 · 三.注释的语法 · 四.CDATA的语法 ...
8. **XPath**:XPath是用于选取XML文档中的节点的语言,通过路径表达式来选取节点,便于查找、导航和操作XML数据。 9. **XSLT**:XSL Transformations(XSLT)是一种用于转换XML文档的样式表语言,可以将XML转换成...
- **数据集成**:能够从多种数据源(如 Oracle 数据库、XML 文件等)提取数据,并将其合并到报告中。 - **灵活性**:支持动态内容生成,可以根据不同的数据输入自动调整报告内容。 - **安全性**:提供了安全的数据...
在处理XML文档时,解析器是关键工具,用于读取和解释XML数据。`OӋ`可能指的是处理XML过程中遇到的错误或异常,这在开发中是常见的问题,需要通过调试和修正代码来解决。 3. **Java环境下的XML操作**:“个人心得”...
它定义了XML文档中允许的元素、属性和实体等规则,确保XML文档格式正确且符合预期。本文将深入探讨DTD的基本概念、语法及其在实际开发中的应用。 #### 一、DTD简介 DTD是早期XML文档结构验证的标准方法之一。通过...
如果XML文件较小,或者需要频繁地在整个文档中搜索和修改数据,DOM可能是更好的选择,因为它提供了方便的数据访问和操作。而如果处理的XML文件非常大,或者只需要顺序读取数据,SAX则是更优的选择,因为它的内存效率...
在这个特定的案例中,爬虫被用来自动化地收集豆瓣图书页面的数据,生成了XML文件,这是一种结构化数据存储格式,用于方便数据交换和处理。 描述中提到“此压缩包里文件为xml”,这暗示了文件的内容是以XML...