XPath是 W3C(World Wide Website Consortium) 的一个标准。它最主要的目的是为了在 XML1.0 或 XML1.1 文档节点树中定位节点所设计。
XPath 即为 XML 路径语言,它是一种用来确定 XML(标准通用标记语言的子集,XML:Extensive Markup Language)文档中某部分位置的语言。XPath 基于 XML 的树状结构,提供在数据结构树中找寻节点的能力。起初 XPath 的提出的初衷是将其作为一个通用的、介于 XPointer 与 XSLT(eXtensible Stylesheet Language + Transformation) 间的语法模型。但是 XPath 很快的被开发者采用来当作小型查询语言。
0. 所谓节点
节点(node),是 XML 文件的最小构成单位,一共分成 7 种:
- element(元素节点)
- attribute(属性节点)
- text (文本节点)
- namespace (名称空间节点)
- processing-instruction (处理命令节点)
- comment (注释节点)
- root (根节点)
1. XPath 上下文
- 当前节点(./):
如./sender表示选择当前节点下的sender节点集合(等同于下面所讲的”特定元素”,如:sender) - 父节点(../):
如../sender表示选择当前节点的父节点下的sender节点集合 - 根元素(/):
如/messages表示选择从文档根节点下的messages节点集合. - 根节点(/*):
这里的*是代表所有节点,但是根元素只有一个,所以这里表示根节点。/*的返回结果和/messages返回的结果一样都是messages节点。 - 递归下降(//):
2. 一个 XML 实例
先看一个XML实例文档。
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
- bookstore :选取 bookstore 元素的所有子节点。
- /bookstore :选取根节点bookstore,这是绝对路径写法。
- bookstore/book :选取所有属于 bookstore 的子元素的 book元素,这是相对路径写法。
- //book :选择所有 book 子元素,而不管它们在文档中的位置。
- bookstore//book :选择所有属于 bookstore 元素的后代的 book 元素,而不管它们位于 bookstore 之下的什么位置。
- //@lang :选取所有名为 lang 的属性。