XPath 是 XML 路径语言(XML Path Language),用来确定XML文档中某部分位置的语言。无论是什么语言什么框架,几乎都可以使用 XPath 来高效查询 XML 文件。
本文将介绍 .NET 中的 XPath 相关类型的使用。
本文读写的 XML 文件会以 文章末尾的代码 - 假设的 XML 文件 作为示例。
关于 XPath 语法,可以阅读 XML 的 XPath 语法 了解更多。
一切从这里开始
.NET 中支持 XPath 的 XML 文档类有两种读取方法,一种是 XPathDocument
,以只读的方式读取;另一种是 XmlDocument
,不止可以读,还可以编辑。
// 得到 walterlv.xml 文档在内存中的快速只读表示形式。
var xPathDocument = new XPathDocument("walterlv.xml");
// 以可读可写的方式打开 walterlv.xml 文件。
var xmlDocument = new XmlDocument();
xmlDocument.Load("walterlv.xml");
如果要确定 XML 的文件编码,需要使用 XmlTextReader
来读 XML 文件;它的基类 XmlReader
没有提供编码信息。XmlTextReader
作为参数传入 XPathDocument
的构造函数或 XmlDocument.Load
方法中即可。
无论是 XPathDocument
还是 XmlDocument
,因为都实现了 IXPathNavigable
,所以都有 CreateNavigator();
方法,调用能得到 XPathNavigator
对象。不过前者的 CanEdit
是 false
,后者的 CanEdit
是 true
。
var navigator1 = xPathDocument.CreateNavigator();
var navigator2 = xmlDocument.CreateNavigator();
上手 XPath
路径查询
XPathNavigator
对象提供了下面两种通用的 XPath
表达式的使用检索方法。
Select
SelectSingleNode
比如希望检索本文末尾的 XML 文件中的 id
,使用 /package/metadata/id
即可检索。
当然,事实上这个 XML 文件是不能这样检索出来 id
的,因为它带有命名空间。
带有命名空间的检索需要使用到 XmlNamespaceManager
类,并写成下面这样:
var namespaceManager = new XmlNamespaceManag