gpt4 book ai didi

xpath - 在 XPath 谓词中执行双斜杠的工作方式与路径本身的工作方式相同

转载 作者:行者123 更新时间:2023-12-03 15:26:05 27 4
gpt4 key购买 nike

我使用 XPather 使用不同的 XPath 查询(仅适用于较旧的 firefox 版本)并注意到以下查询的结果之间的差异

这显示了一些结果

//div[descendant::table/descendant::td[4]] 

这一项列出了空列表
//div[//table//td[4]]

它们是由于某些规则而不同还是只是 XPath 解释器的特定实现的不当行为? (似乎是从 FF 引擎中使用的,XPather 只是一个优秀的简单查询 GUI)

最佳答案

使用 XPath 1.0 ///descendant-or-self::node()/ 的缩写所以你的第一条路径是 /descendant-or-self::node()/div[descendant::table/descendant::td[4]]而第二个与 /descendant-or-self::node()/div[/descendant-or-self::node()/table/descendant-or-self::node()/td[4]] 相当不同.所以主要的区别在于,在你的第一个谓词中,你看不起相对于 div 的后代。元素,而在第二个谓词中,您向下查找根节点的后代 / (也称为文档节点)。
您可能想要 //div[.//table//td[4]]使第二个路径表达式更接近第一个。

[编辑]
这是一个示例:

<html>
<body>
<div>
<table>
<tbody>
<tr>
<td>1</td>
</tr>
<tr>
<td>2</td>
</tr>
<tr>
<td>3</td>
</tr>
<tr>
<td>4</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>

使用该示例,路径 //div[descendant::table/descendant::td[4]]选择 div元素,因为它有 table有第四个 td 的 child 后裔。

然而与 //div[.//table//td[4]]我们找 //div[./descendant-or-self::node()/table/descendant-or-self::node()/td[4]] //div[./descendant-or-self::node()/table/descendant-or-self::node()/child::td[4]]的缩写并且没有元素具有第四个 td子元素。

如果您使用 //div[.//table/descendant::td[4]],我希望能解释差异那么您应该得到与原始表单相同的结果。

关于xpath - 在 XPath 谓词中执行双斜杠的工作方式与路径本身的工作方式相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10053928/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com