——此文章摘自《C#高级编程(第
版)》定价
元 特价
元 购买
下面的示例说明了如何使用ReadElementString()(这段代码在XmlReaderSample文件夹中)注意这个示例使用FileStream所以需要通过using语句来包括SystemIO命名空间
protected void button_Click (object sender SystemEventArgs e)
{
//use a filestream to get the data
FileStream fs = new FileStream(\\\\\\booksxml FileModeOpen);
XmlTextReader tr = new XmlTextReader(fs);
while(!trEOF)
{
//if we hit an element type try and load it in the listbox
if(trMoveToContent() == XmlNodeTypeElement && trFTEL==title)
{
listBoxItemsAdd(trReadElementString());
}
else
{
//otherwise move on
trRead();
}
}
}
在while循环中使用MoveToContent查找类型为XmlNodeTypeElement和名称为title的节点我们使用XmlTextReader的EOF属性作为循环条件如果节点的类型不是Element或者名称不是titleelse子句就会调用Read()方法进入下一个节点查找到一个满足条件的节点后就把ReadElementString()的结果添加到列表框中这样就在listbox中添加一个书名注意在成功执行了ReadElementString()后不需要调用Read()方法这是因为ReadElementString()已经查看了整个Element然后定位到下一个节点上
如果删除了if子句中的&& trFTEL==title在抛出XmlException异常时就必须捕获它如果查看一下数据文件就会发现MoveToContent()查找到的第一个元素是<bookstore>因为它是一个元素所以把检查过程放在if语句中但是它不包含简单的文本类型因此会让ReadElementString()引发一个XmlException异常解决这个问题的一种方式是把ReadElementString()调用放在它自己的函数中现在如果在这个函数中ReadElementString()调用失败就可以处理错误返回给调用函数
下面就调用这个新方法LoadList()把XmltextReader作为参数进行了这些修改后该示例如下所示(这段代码在XmlReaderSample文件夹中)
protected void button_Click (object sender SystemEventArgs e)
{
//use a filestream to get the data
FileStream fs = new FileStream(\\\\\\booksxml FileModeOpen);
XmlTextReader tr = new XmlTextReader(fs);
while(!trEOF)
{
//if we hit an element type try and load it in the listbox
if(trMoveToContent() == XmlNodeTypeElement)
{
LoadList(tr);
}
[] [] []