<root>
<a>
<b>
<ba>
<baa>RM</baa>
<bab>*DB:ZA:4</bab>
</ba>
</b>
<c>
<ca>M</ca>
<cb>1</cb>
</c>
</a>
<a>
<b>
<ba>
<baa>RM</baa>
<bab>*DB:ZA:4</bab>
</ba>
</b>
<c>
<ca>S</ca>
<cb>1</cb>
</c>
</a>
</root>
以下xPath:
//a[//bab/text() = '*DB:ZA:4' and //ca/text() = 'S']
这将返回两个'a'节点。但我只想要一个ca ='S'
的那个我可以使用.//ca/text() = 'S'
来实现这一目标。但我不知道为什么。 epxlain可以吗?
xpath是否会丢失'和'之后的上下文?
我使用了这个XPath-Tester:http://videlibri.sourceforge.net/cgi-bin/xidelcgi
答案 0 :(得分:2)
因为element[//anotherElement]
之类的定位器会返回element
,但会确保某处anotherElement
存在。
定位器element[.//anotherElement]
- 返回元素element
,其中有后代anotherElement
。
在这种情况下,添加点会将搜索从绝对路径更改为相对路径。
答案 1 :(得分:1)
//ca/text() = 'S'
从文档的根开始,因此无论哪个a
元素是上下文,它总是会选择内容为“S”的文本节点。
使用.//ca/text()
代替,因为这会在当前节点的上下文中进行搜索。
答案 2 :(得分:1)
//
将从root开始返回位于文档中任何位置的元素。 .//
将相对于当前节点进行搜索。这可能会产生误导,因为您可能认为在[]中使用它已经是相对的。绝对表达式/
和./
也是如此。