基于子元素内容(相对位置),使用XPath选择父元素

3

这个xpath会返回所有class为theclass的div,但我想根据它是否有一个特定文本内容的span来匹配。(在实际使用中,这个span通常在许多节点下嵌套),所以我不想从父节点指定整个span路径。

我只想返回第一个div。

XPATH

//div[contains(@class, "theclass")][//span[text()="this"]]

HTML / XML

<html>
<div class="theclass">
<ul>
<li>
    <strong>f</strong>
    <span>this</span>
</li>
</ul>
</div>
<div class="theclass">
<ul>
<li>
    <strong>g</strong>
    <span>no</span>
</li>
</ul>
</div>
<div class="notclass">
<ul>
<li>
    <strong>h</strong>
    <span>not</span>
</li>
</ul>
</div>
</html>
1个回答

4
在当前父级 div 的上下文中搜索,只需添加 . 即可:
//div[contains(@class, "theclass") and .//span="this"]

演示(使用xmllint):

$ xmllint index.html --xpath '//div[contains(@class, "theclass") and .//span="this"]'
<div class="theclass">
<ul>
<li>
    <strong>f</strong>
    <span>this</span>
</li>
</ul>

当网站允许我时,我会接受这个答案。目前我必须等待10分钟。 - Conrad Jones

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接