——此文章摘自《C#高级编程(第
版)》定价
元 特价
元 购买
如前所述XmlTextReader非常类似于SAX它们最大的一个区别是SAX是一种推模型(push model)它把数据拉入应用程序中开发人员必须接受它而XmlTextReader是一种拉模型把应用程序请求的数据拉入该应用程序这样编程就有一种更简单更直观的模型另一个优点是拉模型(pull model)可以选择把什么数据传送到应用程序中如果不需要所有的数据就不需要处理它们而在推模型中所有的XML数据都必须由应用程序处理无论是否需要这些数据
下面介绍一个非常简单的示例读取XML数据再详细介绍XmlTextReader类这些代码在XmlReaderSample文件夹中现在用下面的代码替换前面示例中的命名空间MSXML
using SystemXml;
还需要从模块级代码中删除下述代码行
private DOMDocument doc;
下面是按钮的单击事件处理程序
protected void button_Click (object sender SystemEventArgs e)
{
//Modify this path to find booksxml
string fileName = \\\\\\booksxml;
//Create the new TextReader Object
XmlTextReader tr = new XmlTextReader(fileName);
//Read in a node at a time
while(trRead())
{
if(trNodeType == XmlNodeTypeText)
listBoxItemsAdd(trValue);
}
}
这是XmlTextReader最简单的用法首先用XML文件名创建一个字符串对象再创建一个新的XmlTextReader其参数为fileName字符串XmlTextReader目前有种不同的构造函数重载版本其参数是字符串(文件名和URL)流和NameTables的不同组合(当元素或属性名出现几次后它们就可以存储到NameTable中这样比较操作的速度会较快)
在初始化一个XmlTextReader对象后没有选择任何节点只有在此时才没有当前节点在开始trRead()循环后第一个Read()会进入文档中的第一个节点这个节点一般是XML 声明节点在本示例当进入每个节点时可比较trNodeType 和XmlNodeType枚举找到一个文本节点后把该文本值添加到列表框图是加载该列表框后的屏幕图
图
Read方法
遍历文档有几种方式如前面的示例所示Read()可以进入下一个节点然后查看该节点是否有一个值(HasValue())该节点是否有属性(HasAttributes())也可以使用ReadStartElement()方法查看当前节点是否是起始元素如果是起始元素就可以定位到下一个节点上如果不是起始元素就引发一个XmlException调用这个方法与调用Read ()后再调用IsStartElement是一样的
ReadString() 和 ReadChars()方法都可以从元素中读取文本数据ReadString()返回一个包含数据的字符串对象而ReadChars()把数据读入字符数组
ReadElementString() 类似于ReadString()但可以把元素名作为参数如果下一个Content节点不是起始标记或者Name属性不匹配当前的节点Name就会引发异常
[] [] []