首页 理论教育 C#编程新手自学手册-基于流的处理

C#编程新手自学手册-基于流的处理

时间:2023-10-22 理论教育 版权反馈
【摘要】:图14-12 流XML处理类型的对应关系1.使用XmlReader类XmlReader的功能是实现对XML数据流的只进只读访问。表14-22 XmlReaderSettings类属性设置信息例如通过下面的代码,可以创建一个XmlReader对象myXmlReader,用于处理文件“e:\123.xml”。表14-24 节点类型的对应值信息2.使用XmlWriter类XmlWriter的功能是,以只进、只写、非缓存的方式来生成XML流,这是一个抽象的基类。执行后将按照指定格式创建一个名为“123.xml”的文件,如图14-13所示。

C#编程新手自学手册-基于流的处理

在.NET的框架类库的System.XML命名空间内,定义了如下基于流XML处理的类:

System.Xml.XmlReader、System.Xml.XmlWriter、System.Xml.TextReader、System.Xml.NodeReader和System.Xml.TextWrite。

上述流XML处理类型的对应关系如图14-12所示。

978-7-111-36370-5-Part03-210.jpg

图14-12 流XML处理类型的对应关系

1.使用XmlReader

类XmlReader的功能是实现对XML数据流的只进只读访问。XmlReader支持从流文件读取XML数据,其具体功能如下。

978-7-111-36370-5-Part03-211.jpg验证字符是否是合法的XML字符,验证元素名和属性名是否是有效的XML名称。

978-7-111-36370-5-Part03-212.jpg验证XML文档格式是否正确。

978-7-111-36370-5-Part03-213.jpg从XML流检索数据,或使用提取模型跳过不需要的纪录。

在使用XmlReader类时,必须先创建XmlReader对象,其中最为合理的是使用Create方法创建。Create()方法使用XmlReaderSettings类来指定XmlReader实例支持的功能,使用XmlReaderSettings类的属性来设置需要的功能,然后将使用XmlReaderSettings对象传递给方法Create。

XmlReaderSettings类的默认属性设置信息如表14-22所示。

表14-22 XmlReaderSettings类属性设置信息

978-7-111-36370-5-Part03-214.jpg

例如通过下面的代码,可以创建一个XmlReader对象myXmlReader,用于处理文件“e:\123.xml”。

978-7-111-36370-5-Part03-215.jpg

978-7-111-36370-5-Part03-216.jpg

通过使用XmlReader对象,可以只对XML流文件进行访问,当前的节点是读取器当前所处XML的节点。所有的调用方法和执行的操作与当前的节点相关,所有检索到的属性反映了当前节点的值。读取器通过调用一种读取方法前进,重复调用该读取方法可以将读取器移到下一个节点。当XmlReader置于某个节点上之后,就可以通过XmlReader对象属性来获取节点的信息。通过枚举来定义节点的类型XmlNodeType,具体的枚举常数信息如表14-23所示。

表14-23 XmlNodeType枚举节点类型信息

978-7-111-36370-5-Part03-217.jpg

属性Value可以获取当前节点的文本内容,其返回值取决于当前节点的类型,常用节点类型的对应值信息如表14-24所示。

表14-24 节点类型的对应值信息

978-7-111-36370-5-Part03-218.jpg

2.使用XmlWriter

类XmlWriter的功能是,以只进、只写、非缓存的方式来生成XML流,这是一个抽象的基类。XmlWriter类的具体功能如下。

978-7-111-36370-5-Part03-219.jpg验证字符是否是合法的XML字符,验证元素名和属性名是否是有效的XML名称。

978-7-111-36370-5-Part03-220.jpg验证XML文档格式是否正确。

978-7-111-36370-5-Part03-221.jpg二进制字节编码为base64或binhex,并写出生成的文本。

978-7-111-36370-5-Part03-222.jpg使用公共语言运行库类型递值,而不使用字符串。

978-7-111-36370-5-Part03-223.jpg将多个文档写入一个输出流。

978-7-111-36370-5-Part03-224.jpg写出有效的名称、限定名和名称标记。

和XmlReader类一样,使用Create()方法创建XmlWriter对象是最为合理的使用方式。Create()方法是一个静态方法,可以使用XmlRWriterSettings类的属性来实现文件的写入操作。

XmlWriterSettings类的默认属性的设置信息如表14-25所示。

表14-25 XmlWriterSettings类属性设置信息

978-7-111-36370-5-Part03-225.jpg

例如,通过下面的代码可以创建一个名为“123.xml”的文件:

978-7-111-36370-5-Part03-226.jpg

上述代码的设计流程如下:

1)定义string类型变量path,设置创建的文件名为“E:\123.xml”。

2)定义XmlWriterSetting对象mySettings。

3)设置对象Indent属性值为true。

4)通过WriteStartElement()分别写入XML文件的元素。

执行后将按照指定格式创建一个名为“123.xml”的文件,如图14-13所示。

使用WriteNode()方法,可以复制在XmlReader或XPathNavagator对象的当前位置上发现的整个元素的节点。当调用WriteNode()方法时,会将源对象内的所有内容复制到XmlWriter实例中。

978-7-111-36370-5-Part03-227.jpg

图14-13 创建的文件(www.xing528.com)

假如有一个XML源文件“123.xml”,具体代码如下:

978-7-111-36370-5-Part03-228.jpg

可以使用下面的代码将上述文件内容复制到“e:\new.xml”中。

978-7-111-36370-5-Part03-229.jpg

978-7-111-36370-5-Part03-230.jpg

上述代码的设计流程如下:

1)定义string类型变量path和nn,其中nn是被复制的源XML文件,而path是复制nn内容后创建的文件。

2)定义XmlWriterSetting对象mySettings。

3)设置ReadToDescendant参数为“fuzhi”。

4)调用WriteNode()方法来复制文件内容。

执行后将复制文件“e:\123.xml”的内容到“e:\new.xml”,如图14-14所示。

978-7-111-36370-5-Part03-231.jpg

图14-14 复制创建后的新文件

实例66:使用XmlWriter类编写XML文件

下面将通过本实例来讲解使用XmlWriter类编写XML文件的具体方法,本实例保存在“光盘:daima\14”文件夹内,项目名为writeread。实例文件的功能是,在项目的“bin\Debug”目录下生成指定格式的文件“456.xml”。实例文件的主要代码如下:

978-7-111-36370-5-Part03-232.jpg

978-7-111-36370-5-Part03-233.jpg

上述代码的设计流程如下。

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所示。

978-7-111-36370-5-Part03-234.jpg

图14-15 生成的文件

多学一招

也可以通过使用XmlWriter类编写并生成XML文件。具体代码如下:

978-7-111-36370-5-Part03-235.jpg

978-7-111-36370-5-Part03-236.jpg

978-7-111-36370-5-Part03-237.jpg

上述代码的设计流程如下。

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所示。

978-7-111-36370-5-Part03-238.jpg

图14-16 生成的文件

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈