XPath
XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,有不同类型的节点,包括元素节点,属性节点和文本节点,提供在数据结构树中找寻节点的能力。
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="COOKING">
<title lang="en" color="#f0f0f0">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en" color="#000000">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en" color="#000000">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
<book category="WEB">
<title lang="en" color="#ededed">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
表达式 | 描述 | 示例 |
---|---|---|
/ | 从根节点开始 |
* xml示例中 bookstore 是根节点
* 获取根节点下的所有子节点 - /bookstore
|
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 |
* 查找 book 节点 - /bookstores/book (正常方式) - //book(使用 // 直接取)
* 查找 book 节点中的 title - /bookstore/book/title 或 //title 或 //book/title
|
//book [num | last() | last() - num | position()<num] |
* num: 选取第num个book节点
* last(): 选取最后一个book节点
* last() - num: 选取倒数第 num + 1 的book节点
* position()<num: 选取前 num - 1 个 book 节点 |
* 选取第一个 book 节点 - //book [1]
* 选取最后一个book节点 - //book[last()]
* 选取倒数第二个book节点 - //book[last() - 1] (last() 是最后一个 减一后就是第二个)
* 选取前3个book节点 - //book[position() < 4] |
@ | 选取属性 |
* 选取属性名称是 lang 的属性值 - //@lang
* 选取所有拥有名为 lang 的属性的 title 元素 - //title[@lang]
* 选取 color 属性值是 #000000 的,所有 title 节点 - //title[@color="#000000"]
* 选取 price 值大于等于 30 的所有 book 节点 - //book[price >= 30]
* 选取 price 大于等于 30 的 book 的子节点 title - //book[price >= 30]/title |
*、@* |
通配符:来选取未知的 XML 元素
* ‘*’ : 匹配任何元素节点
* @* : 匹配任何属性节点
|
* 选取 bookstore 元素的所有子元素 - /bookstore/*
* 选取文档中的所有元素 - //*
* 选取所有带有属性的 title 节点 - //title[@*] |
| | 使用 | 可以选取多个路径 |
* 选取 book 节点下的 title 和 price 节点 - //book/title | //book/price
* 选取所有 title 和 price 节点 - //title | //price |
contains | 模糊匹配(包含) |
* 获取 category 的值包含 ‘WE’ 的 book 节点 - //book[contains(@category,'WE')]
* 获取 category 的值中包含 ‘E’ 的 book 节点 - //book[contains(@category,'*E')] |
text() | 获取标签中的文本 |
* 获取author中的文本 - //book/author/text() |