——此文章摘自《C#高级编程(第
版)》定价
元 特价
元 购买
XmlDocument及其派生类XmlDataDocument(详见本章后面的内容)是用于在NET中表示DOM的类与XmlReader 和 XmlWriter不同XmlDocument具有读写功能并可以随机访问DOM树XmlDocument类似于MSXML中的DOM执行方式如果您用MSXML编过程序就会觉得使用XmlDocument很合适
下面介绍的示例创建一个XmlDocument对象加载磁盘上的一个文档再从标题元素中加载带有数据的列表框这类似于XmlReader一节的示例区别是本例选择要使用的节点而不是像XmlReader示例那样浏览整个文档
下面是该示例的代码与XmlReader示例相比这个示例是比较简单的(该文件在下载的DOMSample文件夹中)
private void button_Click(object sender SystemEventArgs e)
{
// doc is declared at the module level
// change path to match your path structure
docLoad(\\\\\\booksxml);
// get only the nodes that we want
XmlNodeList nodeLst=docGetElementsByTagName(title);
// iterate through the XmlNodeList
foreach(XmlNode node in nodeLst) listBoxItemsAdd(nodeInnerText);
}
注意我们在本节的示例中添加了模块级的声明
private XmlDocument doc=new XmlDocument();
如果这就是我们需要完成的工作使用XmlReader加载列表框就是一种非常高效的方式原因是我们只浏览一次文档就完成了处理这就是XmlReader的工作方式但如果要重新查看某个节点最好使用XmlDocument扩展该示例添加另一个事件处理程序(即DOMSample)
private void listBox_SelectedIndexChanged(object sender SystemEventArgs e)
{
//create XPath search string
string srch=bookstore/book[title= + listBoxSelectedItemToString()
+ ];
//look for the extra data
XmlNode foundNode = docSelectSingleNode(srch);
if(foundNode != null)
MessageBoxShow(foundNodeInnerText);
else
MessageBoxShow(Not found);
}
在这个示例中与上一个示例一样从booksxml 文档中加载了带有标题的列表框单击列表框会引发SelectedIndexChanged()事件获取列表框中所选项的文本(书名)创建一个XPath 语句把它传送给doc对象的SelectSingleNode() 方法该方法返回title是书名的一部分的book元素(foundNode)在消息框中显示节点的InnerText继续单击列表框中的项目此时文档已经加载且一直到释放它之前它都处于已加载状态
下面简要介绍一下SelectSingleNode()方法它是XmlDocument类的Xpath实现SelectSingleNode ()和 SelectNodes()都是在XmlNode中定义的而XmlDocument是基于XmlNode的SelectSingleNode()返回一个XmlNodeSelectNodes()返回一个XmlNodeListSystemXmlXPath命名空间包含许多Xpath实现后面的一节会介绍它们
插入节点
前面的示例使用XmlTextWriter创建一个新文档其局限性是不能把节点插入到当前文档中而使用XmlDocument类可以做到这一点把上一个示例中的button_Click()事件处理程序作如下改动(在下载代码的DOMSample中)
[] [] []