我是 XPath 的新手。有人可以解释一下如何解决这个问题:
<table>
<tr>
<td>
<table>
<tr>
<td>
<table>
<tr>
<td>Label</td>
<td>value</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
我尝试获取<tr>其中包含的Label价值,但它对我不起作用,
这是我的代码:
//td[contains(.,'Label')]/ancestor::tr[1]
Run Code Online (Sandbox Code Playgroud)
期望的结果:
<tr>
<td>Label</td>
<td>value</td>
</tr>
Run Code Online (Sandbox Code Playgroud)
有人能帮我吗 ?
此表达式与tr您想要的匹配:
//tr[contains(td/text(), 'Label')]
Run Code Online (Sandbox Code Playgroud)
与您的版本一样,这首先扫描tr文档中的所有元素,但此版本仅使用单个谓词。它将td/text()测试限制为该行的孙子节点的实际文本节点。如果您刚刚使用td,则 的所有td后代文本节点将被收集并连接,并且外部tr将匹配。
更新:此外,就其价值而言,您的表达式不起作用的原因是ancestor轴按文档顺序返回元素,而不是从上下文节点的点“向外”。这是我自己遇到的事情,因为它有点不直观。为了使你的方法发挥作用,你需要说
//td[contains(.,'Label')]/ancestor::tr[last()]
Run Code Online (Sandbox Code Playgroud)
代替
//td[contains(.,'Label')]/ancestor::tr[1]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6129 次 |
| 最近记录: |