使用 Visual C# .NET 通过 XPath 表达式查询 XML

  System.Xml.XPath

本任务的内容

概要
 
要求
如何使用 XPath 表达式查询 XML
疑难解答
参考
本页内容
概要 概要
参考 参考

概要

本文演示如何使用 XPathNavigator 类通过 XML 路径语言 (XPath) 表达式查询 XPathDocument 对象。XPath 用于以编程方式计算表达式并选择文档中的特定节点。

返回页首

要求

下面的列表列出了推荐使用的硬件、软件、网络基础结构以及所需的服务包:
Visual C# .NET
本文假定您熟悉下列主题:
XML 术语
创建和读取 XML 文件
XPath 语法
返回页首

如何用 XPath 表达式查询 XML

1. 在 Visual Studio .NET 中新建一个 Visual C# .NET 控制台应用程序。

备注:本示例使用名为 Books.xml 的文件。您可以创建自己的 Books.xml 文件,也可以使用 .NET 软件开发工具包 (SDK) 快速入门中包括的示例。如果您没有安装"快速入门"而且也不想安装它们,请参阅 Books.xml 下载位置的"参考"部分。如果已经安装了"快速入门",则该文件位于以下文件夹中:
Program Files/Microsoft.NET/FrameworkSDK/Samples/Quickstart/Howto/Samples/Xml/Transformxml/VB
必须将该文件复制到 /Bin/Debug 文件夹,该文件夹位于您在其中创建该项目的文件夹中。
2. 确保该项目引用 System.Xml 名称空间。
3. XmlXPath 名称空间上使用 using 语句,这样以后就不需要在代码中限定这些名称空间中的声明了。using 语句必须在所有其他声明之前使用,如下所示:
using System.Xml;
using System.Xml.XPath;
4. 声明合适的变量。声明 XPathDocument 对象以保存 XML 文档,声明 XpathNavigator 对象以计算 XPath 表达式,声明 XPathNodeIterator 对象以迭代通过选定节点。声明 String 对象以保存 XPath 表达式。在 Class1 的 Main 函数中添加声明代码。
XPathNavigator nav;
XPathDocument docNav;
XPathNodeIterator NodeIter;
String strExpression;
5. 用示例文件 Books.xml 加载 XPathDocumentXPathDocument 类使用可扩展样式表语言转换 (XSLT) 为 XML 文档处理提供快速和面向性能的缓存。它类似于 XML 文档对象模型 (DOM),但经过了高度优化,以用于 XSLT 处理和 XPath 数据模型。
// Open the XML.
docNav = new XPathDocument(@"c:/books.xml");
6. 从文档创建 XPathNavigatorXPathNavigator 对象用于进行只读 XPath 查询。XPath 查询可返回结果值或许多节点。
// Create a navigator to query with XPath.
nav = docNav.CreateNavigator();
7. 创建 XPath 表达式以查找图书的平均价格。这个 XPath 表达式返回单个值。有关 XPath 语法的完整详细信息,请参见"参考"部分中的"XPath 语法"。
// Find the average cost of a book.
// This expression uses standard XPath syntax.
strExpression = "sum(/bookstore/book/price) div count(/bookstore/book/price)";
8. 使用 XPathNavigator 对象的 Evaluate 方法计算 XPath 表达式。Evaluate 方法返回该表达式的结果。
// Use the Evaluate method to return the evaluated expression.
Console.WriteLine("The average cost of the books are {0}", nav.Evaluate(strExpression));
9. 创建 XPath 表达式以查找价格超过 10 美元的所有图书。这个 XPath 表达式只从 XML 源中返回 Title 节点。
// Find the title of the books that are greater then $10.00.
strExpression = "/bookstore/book/title[../price>10.00]";
10. 为使用 XPathNavigatorSelect 方法选择的节点创建 XPathNodeIteratorXPathNodeIterator 表示 XPath 节点集,因此它支持针对该节点集执行的操作。
// Select the node and place the results in an iterator.
NodeIter = nav.Select(strExpression);
11. 使用从 XPathNavigatorSelect 方法返回的 XPathNodeIterator 遍历选定的节点。在这种情况下,可使用 XPathNodeIteratorMoveNext 方法迭代通过选定的所有节点。
Console.WriteLine("List of expensive books:");
//Iterate through the results showing the element value.
while (NodeIter.MoveNext())
     {
Console.WriteLine("Book Title:{0}", NodeIter.Current.Value);
     };
12. 使用 ReadLine 方法在控制台显示的末尾添加 pause,以便更容易地显示上述结果。
//Pause
Console.ReadLine();
13. 生成并运行您的项目。请注意,这些结果显示在控制台窗口中。
返回页首

疑难解答

在测试代码时,您可能会收到以下异常错误信息:
An unhandled exception of type 'System.Xml.XmlException' occurred in System.xml.dll

Additional information:System error.
该异常错误发生在以下代码行上:
docNav = new XPathDocument("c://books.xml");
该异常错误是由无效的处理指令导致的。例如,处理指令可能包含多余的空格。下面是无效处理指令的示例:
若要解决该异常,请执行以下操作之一:
纠正无效的处理指令。下面是有效处理指令的示例:
- 或 -
下面是有效处理指令的示例:从 Books.xml 文件中删除 XML 处理指令。
 

你可能感兴趣的:(ASP.NET编程)