查找包含文本的div

时间:2016-04-07 13:19:02

标签: html xpath

我有以下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。任何人都可以解释我为什么,如果我想在两种情况下获得相同的结果,该怎么做。

1 个答案:

答案 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()只是从当前上下文元素返回后代文本节点