上一篇学习XPath 使用路径表达式在 XML 文档中选取节点。斜线”/”是从根节点选择,双斜线”//”从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置,点”.”选取当前节点,两点”..”选取当前节点的父节点,“@”为选取属性。
谓语在XPath是重要的一部分,谓语用来查找某个特定的节点或者包含某个指定的值的节点。谓语被嵌在方括号中。
本篇主要学习XPath的谓语,更复杂的谓语结合其他XPath函数使用和选择未知的XML元素和选择若干路径。
1、选择AAA下的第一个BBB元素 语法:/AAA/BBB[1]
- <AAA>
- <BBB/>
- <BBB/>
- <BBB/>
- <BBB/>
- </AAA>
2、选择AAA下的最后一个BBB元素 语法:/AAA/BBB[last()]
- <AAA>
- <BBB/>
- <BBB/>
- <BBB/>
- <BBB/>
- </AAA>
3、选择AAA下的倒数第二个BBB元素 语法:/AAA/BBB[last()-1]
- <AAA>
- <BBB/>
- <BBB/>
- <BBB/>
- <BBB/>
- </AAA>
4、选择AAA下的前面两个BBB元素 语法:/AAA/BBB[position()<3]
- <AAA>
- <BBB/>
- <BBB/>
- <BBB/>
- <BBB/>
- </AAA>
5、获取AAA下的BBB下的有s属性的CCC元素 语法:/AAA/BBB/CCC[@s]
- <AAA>
- <BBB>
- <CCC s = "1"/>
- <CCC s = "2"/>
- <CCC s = "3"/>
- <CCC s = "4"/>
- <CCC s = "5"/>
- <CCC r = "a"/>
- </BBB>
- <CCC>
- <BBB r = "a"/>
- <BBB r = "b"/>
- <BBB r = "c"/>
- </CCC>
- <BBB/>
- <BBB/>
- </AAA>
6、选取所有 bookstore 元素的 book 元素,且其中的 price 元素的值须大于 35.00。 语法:bookstore/book[price>35.00]
- <bookstore>
- <book>
- <title land="eng">Book1</title>
- <price>29.99</tilte>
- </book>
- <book>
- <title land="eng">Book2</title>
- <price>39.55</tilte>
- </book>
- </bookstore>
7、选取所有 bookstore 元素中的 book 元素的 title 元素,且其中的 price 元素的值须大于 35.00. 语法:/bookstore/book[price>35.00]/title
- <bookstore>
- <book>
- <title land="eng">Book1</title>
- <price>29.99</tilte>
- </book>
- <book>
- <title land="eng">Book2</title>
- <price>39.55</tilte>
- </book>
- </bookstore>
1、星号 * 表示选择所有由星号之前的路径所定位的元素,*是通配符,表示该路径下的所有元素,也表示层次。
选择所有路径依附于/AAA/CCC/DDD的元素 语法:/AAA/CCC/DDD/*
- <AAA>
- <XXX>
- <DDD>
- <BBB/>
- <BBB/>
- <EEE/>
- <FFF/>
- </DDD>
- </XXX>
- <CCC>
- <DDD>
- <BBB/>
- <BBB/>
- <EEE/>
- <FFF/>
- </DDD>
- </CCC>
- <CCC>
- <BBB>
- <BBB>
- <BBB/>
- </BBB>
- </BBB>
- </CCC>
- </AAA>
选择所有的有3个祖先元素的BBB元素,即在第四层的BBB元素 语法:/*/*/*/BBB
- <AAA>
- <XXX>
- <DDD>
- <BBB/>
- <BBB/>
- <EEE/>
- <FFF/>
- </DDD>
- </XXX>
- <CCC>
- <DDD>
- <BBB/>
- <BBB/>
- <EEE/>
- <FFF/>
- </DDD>
- </CCC>
- <CCC>
- <BBB>
- <BBB>
- <BBB/>
- </BBB>
- </BBB>
- </CCC>
- </AAA>
选择所有元素 语法://*
- <AAA>
- <BBB/>
- <BBB/>
- <BBB/>
- <BBB/>
- </AAA>
2、“@*”匹配任何属性的节点,not(@*)匹配没有任何属性的节点。这里Xpath学习:基本语法有例子。
3、“|”是多个路径选择的并集,可以利用“|”查找符合多个条件的节点。
获取所有的BBB元素和EEE元素 语法://BBB|//EEE
- <AAA>
- <XXX>
- <DDD>
- <BBB/>
- <BBB/>
- <EEE/>
- <FFF/>
- </DDD>
- </XXX>
- <CCC>
- <DDD>
- <BBB/>
- <BBB/>
- <EEE/>
- <FFF/>
- </DDD>
- </CCC>
- <CCC>
- <BBB>
- <BBB>
- <BBB/>
- </BBB>
- </BBB>
- </CCC>
- </AAA>
获取AAA下XXX下的DDD的BBB元素和EEE元素 语法:/AAA/XXX/DDD/BBB|/AAA/XXX/DDD/EEE
- <AAA>
- <XXX>
- <DDD>
- <BBB/>
- <BBB/>
- <EEE/>
- <FFF/>
- </DDD>
- </XXX>
- <CCC>
- <DDD>
- <BBB/>
- <BBB/>
- <EEE/>
- <FFF/>
- </DDD>
- </CCC>
- <CCC>
- <BBB>
- <BBB>
- <BBB/>
- </BBB>
- </BBB>
- </CCC>
- </AAA>
到此,基本介绍XPath的基本语法(选取节点,谓语,选取未知节点和选取若干节点),接下来学习XPath的轴。