本文的发布号曾为 CHS313188
概要
本文介绍如何通过指定 命名空间前缀:元素名 格式的完全限定元素名在 XmlDocument 对象中选择节点。返回页首
创建 XML 文件
- 在 Windows 开始菜单上,指向运行,键入 notepad.exe,然后单击确定以打开记事本。 复制以下代码并将其粘贴到记事本中:
<?xml version='1.0' encoding='utf-16'?> <bk:Books xmlns:bk='http://myserver/myschemas/Books'> <bk:Book> <bk:Title>Just XML</bk:Title> </bk:Book> <bk:Book> <bk:Title>Professional XML</bk:Title> </bk:Book> <bk:Book> <bk:Title>XML Step by Step</bk:Title> </bk:Book> <bk:Book> <bk:Title>XML By Example</bk:Title> </bk:Book> </bk:Books>
- 复制以下代码并将其粘贴到记事本中: 在文件菜单上,单击保存。
- 复制以下代码并将其粘贴到记事本中: 在另存为对话框的保存类型文本框中,键入所有文件。 在文件名文本框中,键入 Books.xml,然后单击确定。
创建 Visual C# .NET 项目
下面的代码示例使用以下对象和类:- XPathNavigator 类: XPathNavigator 基于 XML 路径语言 (XPath) 数据模型,该类提供对任何数据存储区实现 XPath 查询所需要的方法。
- XPathExpression 类: 该类封装已编译的 XPath 表达式,在调用 Compile 时会返回该类。 Select、Evaluate 和 Matches 方法使用该类。
- XmlNamespaceManager 类: XmlNamespaceManager 用于解析命名空间,向集合添加命名空间,以及从集合删除命名空间。 XmlNamespaceManager 还为这些命名空间提供范围管理。 因为 Books.xml 在代码中使用下面的“bk”命名空间,所以您必须使用 XmlNamespaceManager。
- XPathNodeIterator 类: 该对象提供对一组选定节点的迭代程序。
- 在 Visual C# .NET 中新建一个 Windows 应用程序项目。默认情况下会将 Form1 添加到项目中。
- 将一个 Button 控件和一个 TextBox 控件放到 Form1 上。
- 将 TextBox 控件的 MultiLine 属性设置为 True。
- 单击以展开 TextBox 控件,以便查看四到五行数据。
- 将下面的代码添加到“代码”窗口顶部:
using System.Xml; using System.Xml.XPath;
- 若要将 Books.xml file 文件加载到 XmlDocument 对象中,请将下面的代码添加到 Button 对象的 Click 事件中。
XmlDocument oxmldoc = new XmlDocument(); oxmldoc.Load(@"c:/Books.xml");
- 确保前面代码中的 Books.xml 路径指向计算机上的正确路径。
- 使用 XmlDocument 对象的 CreateNavigator 方法创建 XPathNavigator 对象,以便运行 XPath 查询:
XPathNavigator oXPathNav; oXPathNav = oxmldoc.CreateNavigator();
- 使用 XPathNavigator 的 Compile 方法创建 XPathExpression 类,然后传递 XPath 查询作为参数:
XPathExpression Expr; Expr = oXPathNav.Compile("//bk:Book[position()>=2]");
- 使用 AddNamespace 方法向 XmlNamespaceManager 对象添加“bk”命名空间:
XmlNamespaceManager(oXPathNav.NameTable); oxmlNSManager.AddNamespace("bk", "http://myserver/myschemas/Books");
- 使用 XPathExpression 的 SetContext 方法将 XPathExpression 上下文设置为 XmlNamespaceManager:
Expr.SetContext(oxmlNSManager);
- 若要运行 XPath 查询并返回选定的节点,请将表达式传递给 XPathNodeIterator 的 Select 方法:
XPathNodeIterator iterator = oXPathNav.Select(Expr); while (iterator.MoveNext()) { this.textBox1.Text = this.textBox1.Text + "/r/n"+ iterator.Current.Value ; }
- Button1_Click 事件中的代码应显示如下:
XmlDocument oxmldoc = new XmlDocument(); try { oxmldoc.Load("c://Books.xml"); XPathNavigator oXPathNav; oXPathNav = oxmldoc.CreateNavigator(); XPathExpression Expr; Expr = oXPathNav.Compile("//bk:Book[position()>=2]"); XmlNamespaceManager oxmlNSManager = new XmlNamespaceManager(oXPathNav.NameTable); oxmlNSManager.AddNamespace("bk", "http://myserver/myschemas/Books"); Expr.SetContext(oxmlNSManager); XPathNodeIterator iterator = oXPathNav.Select(Expr); while (iterator.MoveNext()) { this.textBox1.Text = this.textBox1.Text + "/r/n"+ iterator.Current.Value ; } oxmlNSManager = null; oXPathNav = null; oxmldoc = null; } catch (Exception exc) { MessageBox.Show(exc.Message); }
- 生成并运行该项目。
- 单击 Button1。 注意,文本框中将出现一个书籍列表,这些书的位置大于或等于 2。
参考
有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中的文章:280457 PRB: Specifying Fully Qualified Element Names in XPath Queries(在 XPath 查询中指定完全限定的元素名称)
返回页首这篇文章中的信息适用于:
- Microsoft Visual C# .NET (2002)
最近更新: | 2002-2-24 (1.0) |
关键字 | kbhowto kbHOWTOmaster kbMSXML KB313188 |