2015-04-01 41 views
1

此xpath返回两个div与类class,我想基于它匹配具有特定文本内容的跨度。 (真实世界的用法跨度嵌套在许多节点下),所以我不想从父节点指定跨度的整个路径。xpath根据(相对)子内容选择父项

我想只返回第一个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> 

回答

4

通过添加.使在当前父div的上下文中的搜索:(使用xmllint

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

演示:

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

非常感谢。完美地处理真实的使用案例。 – 2015-04-01 22:22:42

+0

当网站让我时,我会接受答案。我目前需要等待10分钟。 – 2015-04-01 22:23:09