XPath使用路径表达式来选择XML中的结点或结点组。
<?xml version="1.0" encoding="UTF-8"?> <bookstore> <book> <title lang="en">Harry Potter</title> <price>29.99</price> </book> <book> <title lang="en">Learning XML</title> <price>39.95</price> </book> </bookstore>
下表列出了最有用的路径表达式:
| 表达式 | 描述 |
|---|---|
| 结点名 | 选择所有具有该结点名的结点 |
| / | 从根结点选择(绝对路径) |
| // | 从当前结点选择而不管其在何处 |
| . | 选择当前结点 |
| .. | 选择父结点 |
| @ | 选择属性 |
应用于前面的例子,结果如下:
| 路径表达式 | 结果 |
|---|---|
| bookstore | 选择所有名为“bookstore”的结点 |
| /bookstore | 选择根元素bookstore |
| bookstore/book | 从bookstore的孩子结点中选择所有book结点 |
| //book | 从文本中选择所有book结点而不管其在哪 |
| bookstore//book | 在bookstore的后继中选择所有book结点 |
| //@lang | 在文本中选择所有“lang”属性 |
谓词用来查询某一特定结点或具有特定值的结点。
谓词总是用一对方括号来框住。
如下表所示:
| Path Expression | Result |
|---|---|
| /bookstore/book[1] | 选取bookstore第一个名为book的子结点 |
| /bookstore/book[last()] | 选取bookstore最后一个名为book的子结点 |
| /bookstore/book[last()-1] | 选取bookstore倒数第二个名为book的子结点 |
| /bookstore/book[position()<3] | 选取bookstore前2个book子结点 |
| //title[@lang] | 选取所有具有“lang”属性的title结点 |
| //title[@lang=‘en‘] | 选取所有具有“lang”属性且为‘en’的title结点 |
| /bookstore/book[price>35.00] | 选取bookstore子结点中price>35.00的book结点 |
| /bookstore/book[price>35.00]/title | 选取bookstore子结点中price>35.00的book结点的title |
| 通配符 | 描述 |
|---|---|
| * | 匹配任何元素结点 |
| @* | 匹配任何属性结点 |
| node() | 匹配任何类型的任何结点 |
如下所示:
| 路径表达式 | 结果 |
|---|---|
| /bookstore/* | 选取bookstore的所有子结点 |
| //* | 选取文本中所有元素结点 |
| //title[@*] | 选取具有属性的标题元素 |
运用 | 运算符来实现多路径选择。
如下所示:
| 路径表达式 | 结果 |
|---|---|
| //book/title | //book/price | 选出所有book结点中的title和price结点 |
| //title | //price | 选出文本中的title和price结点 |
| /bookstore/book/title | //price | 选取bookstore中的book元素中的title元素和所有price元素 |
参考资料:https://www.w3schools.com/xml/xpath_syntax.asp
原文:https://www.cnblogs.com/hilovexy-blog/p/11258400.html