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