gpt4 book ai didi

xpath - 如何构造一个 xpath 来选择不包含字符串的项目

转载 作者:行者123 更新时间:2023-12-03 15:23:38 25 4
gpt4 key购买 nike

我如何使用类似于以下示例的内容,但结果相反,即不包含 (default) 的项目在文中。

<test>
<item>Some text (default)</item>
<item>Some more text</item>
<item>Even more text</item>
</test>

鉴于这种
//test/item[contains(text(), '(default)')]

将返回第一项。是否有可以与 contains 一起使用的 not 运算符?

最佳答案

就在这里:

//test/item[not(contains(text(), '(default)'))]

提示:not()是 XPath 中的函数而不是运算符。

另一种可能更好的表达方式是:

//test/item[not(text()[contains(., '(default)')])]

这两个表达式之间存在细微但重要的区别(我们分别称它们为 A 和 B)。

简单案例:如果所有 <item>只有一个文本节点子节点,A 和 B 的行为相同。

复杂案例:<item>可以有多个文本节点子节点,表达式 A 仅在 '(default)' 时匹配发生在第一个。

这是因为 text()匹配所有文本节点子节点并生成节点集。到目前为止并不奇怪。现在,contains()接受一个节点集作为它的第一个参数,但它需要将它转换为字符串来完成它的工作。并且从节点集到字符串的转换只产生集合中第一个节点的字符串值,所有其他节点都被忽略(尝试 string(//item) 看看我的意思)。在简单的情况下,这也正是发生的情况,但结果并不令人惊讶。

表达式 B 通过分别显式检查每个文本节点而不是仅检查整个 <item> 的字符串值来处理此问题。元素。因此,它是两者中更强大的。

关于xpath - 如何构造一个 xpath 来选择不包含字符串的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2677152/

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