我有以下HTML和XPath正常工作
<div class="panel panel-default">
<div class="panel-heading"><h1>Text to find</h1></div>
<div class="panel-body">
<div>
...
</div>
</div>
</div>
的XPath:
.//div[div[@class[contains(.,'panel-heading')]][.//*[text()='Text to find']]]
XPath表达式将选择外部<div>
。
现在,如果删除<h1>
标记,XPath表达式将不再找到外部div。任何人都可以解释我为什么,如果我想在两种情况下获得相同的结果,该怎么做。
答案 0 :(得分:3)
那是因为.//*
部分返回<div class="panel-heading">
的后代元素。当您删除h1
标记时,文本节点'Text to find'
不再包含在任何后代元素中(它现在是上下文元素的直接子元素),因此可以&#39 ; t可以使用表达式.//*[text()='Text to find']
找到。
要使用h1
元素和不使用.//text()[.='Text to find']
元素,它可以将上面提到的谓词表达式更改为.//div[div[@class[contains(.,'panel-heading')]][.//text()[.='Text to find']]]
:
.//text()
upper()
只是从当前上下文元素返回后代文本节点。