在.NET的框架类库的System.XML命名空间内,定义了如下基于流XML处理的类:
System.Xml.XmlReader、System.Xml.XmlWriter、System.Xml.TextReader、System.Xml.NodeReader和System.Xml.TextWrite。
上述流XML处理类型的对应关系如图14-12所示。
图14-12 流XML处理类型的对应关系
1.使用XmlReader
类XmlReader的功能是实现对XML数据流的只进只读访问。XmlReader支持从流文件读取XML数据,其具体功能如下。
验证字符是否是合法的XML字符,验证元素名和属性名是否是有效的XML名称。
验证XML文档格式是否正确。
从XML流检索数据,或使用提取模型跳过不需要的纪录。
在使用XmlReader类时,必须先创建XmlReader对象,其中最为合理的是使用Create方法创建。Create()方法使用XmlReaderSettings类来指定XmlReader实例支持的功能,使用XmlReaderSettings类的属性来设置需要的功能,然后将使用XmlReaderSettings对象传递给方法Create。
XmlReaderSettings类的默认属性设置信息如表14-22所示。
表14-22 XmlReaderSettings类属性设置信息
例如通过下面的代码,可以创建一个XmlReader对象myXmlReader,用于处理文件“e:\123.xml”。
通过使用XmlReader对象,可以只对XML流文件进行访问,当前的节点是读取器当前所处XML的节点。所有的调用方法和执行的操作与当前的节点相关,所有检索到的属性反映了当前节点的值。读取器通过调用一种读取方法前进,重复调用该读取方法可以将读取器移到下一个节点。当XmlReader置于某个节点上之后,就可以通过XmlReader对象属性来获取节点的信息。通过枚举来定义节点的类型XmlNodeType,具体的枚举常数信息如表14-23所示。
表14-23 XmlNodeType枚举节点类型信息
属性Value可以获取当前节点的文本内容,其返回值取决于当前节点的类型,常用节点类型的对应值信息如表14-24所示。
表14-24 节点类型的对应值信息
2.使用XmlWriter
类XmlWriter的功能是,以只进、只写、非缓存的方式来生成XML流,这是一个抽象的基类。XmlWriter类的具体功能如下。
验证字符是否是合法的XML字符,验证元素名和属性名是否是有效的XML名称。
验证XML文档格式是否正确。
将二进制字节编码为base64或binhex,并写出生成的文本。
使用公共语言运行库类型递值,而不使用字符串。
将多个文档写入一个输出流。
写出有效的名称、限定名和名称标记。
和XmlReader类一样,使用Create()方法创建XmlWriter对象是最为合理的使用方式。Create()方法是一个静态方法,可以使用XmlRWriterSettings类的属性来实现文件的写入操作。
XmlWriterSettings类的默认属性的设置信息如表14-25所示。
表14-25 XmlWriterSettings类属性设置信息
例如,通过下面的代码可以创建一个名为“123.xml”的文件:
上述代码的设计流程如下:
1)定义string类型变量path,设置创建的文件名为“E:\123.xml”。
2)定义XmlWriterSetting对象mySettings。
3)设置对象Indent属性值为true。
4)通过WriteStartElement()分别写入XML文件的元素。
执行后将按照指定格式创建一个名为“123.xml”的文件,如图14-13所示。
使用WriteNode()方法,可以复制在XmlReader或XPathNavagator对象的当前位置上发现的整个元素的节点。当调用WriteNode()方法时,会将源对象内的所有内容复制到XmlWriter实例中。
图14-13 创建的文件(www.xing528.com)
假如有一个XML源文件“123.xml”,具体代码如下:
可以使用下面的代码将上述文件内容复制到“e:\new.xml”中。
上述代码的设计流程如下:
1)定义string类型变量path和nn,其中nn是被复制的源XML文件,而path是复制nn内容后创建的文件。
2)定义XmlWriterSetting对象mySettings。
3)设置ReadToDescendant参数为“fuzhi”。
4)调用WriteNode()方法来复制文件内容。
执行后将复制文件“e:\123.xml”的内容到“e:\new.xml”,如图14-14所示。
图14-14 复制创建后的新文件
实例66:使用XmlWriter类编写XML文件
下面将通过本实例来讲解使用XmlWriter类编写XML文件的具体方法,本实例保存在“光盘:daima\14”文件夹内,项目名为writeread。实例文件的功能是,在项目的“bin\Debug”目录下生成指定格式的文件“456.xml”。实例文件的主要代码如下:
上述代码的设计流程如下。
1)定义string类型变量path,设置创建的xml文件名为“456.xml”。
2)验证被创建文件名的长度,如果非法则输出提示。
3)定义XmlReaderSettings对象mm。
4)设置XmlReaderSettings对象属性Indent的值为true。
5)使用XmlReaderSettings对象来创建XmlReader对象writer。
6)定义方法WriteXml(),将指定的信息写入到XML文件内。
7)定义方法WriteChildNode(),将指定的XML元素写入到创建的文件内。
执行后将在“bin\Debug”目录下生成指定的文件“456.xml”,如图14-15所示。
图14-15 生成的文件
多学一招
也可以通过使用XmlWriter类编写并生成XML文件。具体代码如下:
上述代码的设计流程如下。
1)定义string类型变量path,设置创建的xml文件名为“E:\456.xml”。
2)验证被创建文件名的长度,如果非法则输出提示。
3)定义XmlReaderSettings对象mm。
4)设置XmlReaderSettings对象属性Indent的值为true。
5)使用XmlReaderSettings对象来创建XmlReader对象writer。
6)定义方法WriteXml(),将指定的信息写入到XML文件内。
7)定义方法WriteChildNode(),将指定的XML元素写入到创建的文件内。
将上述代码保存为“光盘:\daima\19\duqu”,执行后将在“bin\Debug”目录下生成指定文件“456.xml”,如图14-16所示。
图14-16 生成的文件
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。