使用 Visual C# .NET 通过 XPath 表达式查询 XML
2004-12-21 23:14
691 查看
HOW TO:使用 Visual C# .NET 通过 XPath 表达式查询 XML
文章 ID | : | 308333 |
最后更新日期 | : | 2004年8月13日 |
版本 | : | 1.0 |
有关本文的 Microsoft Visual Basic .NET 版本,请参见 301220。
本文引用下面的 Microsoft .NET 框架类库名称空间:
• | System.Xml.XPath |
本任务的内容
• | 概要 | ||||||
| |||||||
• | 参考 |
![]() | 概要 |
![]() | 参考 |
概要
本文演示如何使用 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. | 在 Xml 和 XPath 名称空间上使用 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 加载 XPathDocument。XPathDocument 类使用可扩展样式表语言转换 (XSLT) 为 XML 文档处理提供快速和面向性能的缓存。它类似于 XML 文档对象模型 (DOM),但经过了高度优化,以用于 XSLT 处理和 XPath 数据模型。 // Open the XML. docNav = new XPathDocument(@"c:/books.xml"); |
6. | 从文档创建 XPathNavigator。XPathNavigator 对象用于进行只读 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 4000 = "/bookstore/book/title[../price>10.00]"; |
10. | 为使用 XPathNavigator 的 Select 方法选择的节点创建 XPathNodeIterator。XPathNodeIterator 表示 XPath 节点集,因此它支持针对该节点集执行的操作。 // Select the node and place the results in an iterator. NodeIter = nav.Select(strExpression); |
11. | 使用从 XPathNavigator 的 Select 方法返回的 XPathNodeIterator 遍历选定的节点。在这种情况下,可使用 XPathNodeIterator 的 MoveNext 方法迭代通过选定的所有节点。 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");该异常错误是由无效的处理指令导致的。例如,处理指令可能包含多余的空格。下面是无效处理指令的示例:
<?xml version='1.0'?>若要解决该异常,请执行以下操作之一:
• | 纠正无效的处理指令。下面是有效处理指令的示例: <?xml version='1.0'?>- 或 - |
• | 下面是有效处理指令的示例:从 Books.xml 文件中删除 XML 处理指令。 |
参考
下列文件可从 Microsoft 下载中心下载:立即下载 Books.xml有关更多信息,请访问以下 Microsoft Web 站点:
.NET 中的 XML:.NET Framework XML Classes and C# Offer Simple, Scalable Data Manipulation(.NET 中的 XML:.NET 框架 XML 类和 C# 提供简单的可缩放的数据操作)R/> http://msdn.microsoft.com/msdnmag/issues/01/01/xml/xml.asp
XPathNavigator Class
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemXmlXPathXPathNavigatorClassTopic.asp
XPathDocument Class(XPathDocument 类)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemXmlXPathXPathDocumentClassTopic.asp
XPathNodeIterator Class(XPathNodeIterator 类)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemXmlXPathXPathNodeIteratorClassTopic.asp
XSLT Transformations with the XslTransform Class(使用 XslTransform 类 的 XSLT 转换)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconxslttransformationswithxsltransformclass.asp
XPath Examples(XPath 示例)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk30/htm/xmrefxpathexamples.asp
XPath Syntax(XPath 语法)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk30/htm/xmrefxpathsyntax.asp 有关 XPath 的更多信息,请访问下列 WWW 联合会 (W3C) Web 站点:
XML 路径语言 (XPath)
1.0 版:W3C 在 1999 年 11 月 16 日提出的建议
http://www.w3.org/TR/1999/REC-xpath-19991116 返回页首
相关文章推荐
- 使用 Visual C# .NET 通过 XPath 表达式查询 XML
- 使用 Visual C# .NET 通过 XPath 表达式查询 XML
- 使用 Visual C# .NET 通过 XPath 表达式查询 XML
- 使用 System.Xml.XmlDocument 类可在 Visual C#.net 中执行 XPath 查询
- .NET(C#):使用XPath查询带有命名空间(有xmlns)的XML
- 使用 Visual C# .NET 在 XPath 查询中指定完全限定的元素名称 (From MSDN)
- .NET(C#):使用XPath查询带有命名空间(有xmlns)的XML
- <转>使用 Visual C# .NET 在 XPath 查询中指定完全限定的元素名称
- 如何使用 ASP.NET、ADO.NET 和 Visual C# .NET 查询和显示 Excel 数据
- 如何使用 ASP.NET、ADO.NET 和 Visual C# .NET 查询和显示 Excel 数据
- HOW TO:使用 Visual C# .NET 向 Microsoft Excel 2002 传输 XML 数据
- XML 文件:使用 JScript、C# 和 Visual Basic.NET 扩展 XSLT
- 如何使用 XPath 表达式查询 XML
- 如何使用 Visual C# 2005 或 Visual C# .NET 通过 DataSet 对象更新数据库
- 使用 Visual C# .NET 向 Microsoft Excel 2002 传输 XML 数据
- 如何使用 AllowPartiallyTrustedCallers 属性来调用具有一个强名称从 Web 页通过使用 Visual C#.NET、 Visual C# 2005年或更高版本的程序集
- 通过代码学习C#&.NET——委托使用(正则表达式替换)
- 311530 HOW TO:在 Visual C# .NET 中使用 System.Xml 合并两个 XML 文档中的数据 (From MKBA)
- 如何通过使用窗体身份验证和 Visual C#.NET 对 Active Directory 验证身份
- HOW TO:使用 Visual C# .NET 从文件中读取 XML