ChatGPT解决这个技术问题 Extra ChatGPT

不同节点的 XPath OR 运算符

如何使用 XPath:

//bookstore/book/title or //bookstore/city/zipcode/title

只有 //title 行不通,因为我也有 //bookstore/magazine/title

ps 我看到了很多例子,但主要是属性或单节点结构。

OR 包括双方。您正在寻找的是 XOR 运算符。您将 OR 一词的英语用法与逻辑运算符混为一谈。
在这种情况下,使用 or 或 xor 没有区别,因为不可能同时匹配双方。

S
Stephan

zipcodebook 节点为父节点的所有 title 节点:

版本 1:

//title[parent::zipcode|parent::book]

版本 2:

//bookstore/book/title|//bookstore/city/zipcode/title

版本 3:(结果是根据源数据排序的,而不是按书籍顺序和邮政编码排序)

//title[../../../*[book] or ../../../../*[city/zipcode]]

或 - 在 true/false 中使用 - xpath 中的布尔运算符

- xpath 中的联合运算符,将运算符右侧的查询附加到左侧查询的结果集。


“|”在 XPath 中并不是真正的“OR 运算符”。它允许您构建由整个 XML 树的子树组成的节点集。 “//book|//cd”表示在所有子节点和根节点的后代中找到所有名为“book”的节点,然后也找到所有名为“cd”的节点。如果在根节点的后代中只有书节点,则您的节点集将仅包含书节点。如果在根节点的后代中只有 cd 节点,则您的节点集将仅包含 cd 节点。如果在根节点的后代中同时存在 book 和 cd 节点,则您的节点集将同时包含 book 和 cd 节点。
是的,我明白什么是“|”运营商是。我最初的问题是关于 OR 运算符。因此,如果有书籍和 CD,它将只查找书籍,如果没有书籍,但只有 CD,它将查找 CD。
@user569008:|union set operator
那么,我的问题没有答案/节点的 XPath 中没有 OR 运算符?
逻辑运算符(OR、XOR、AND)在每种编程语言中都是相同的,但自然语言对它们的解释略有不同。在讨论与其相关的问题时,最好消除歧义。此外,对于 XPath,最好不要将您的结果视为a 或 b,而是可以由 a 或 b< /i>。逻辑 or 表示它可以被 a or b or both 定位。 Logical xor (eXclusive OR) 表示它可以通过 either a or b, but not both 定位。逻辑 and 表示它可以被 both a and b 定位。
T
Tim

如果您只想选择具有联合运算符的两个节点之一,可以使用此解决方案:(//bookstore/book/title | //bookstore/city/zipcode/title)[1]


真的 ()[1] 意味着只选择两者之一?!?!
@Anthony是的,如果两个节点都存在,它将选择两者之一,或者它将选择唯一存在的一个。
好吧,我误解了你的说法。它像任何其他“或”运算符一样运行,因此如果第一个条件返回 true,那么第二个条件就会被绕过,是吗?
@Anthony 不,这里没有条件。有节点。和“|” - 是节点联合运算符。它从指定路径创建节点集,并且不保证节点顺序。如果具有指定路径的节点不存在,则它只是在节点集中丢失。然后,“[1]”构造从节点集中获取第一个节点。
@Anthony整个构造“(path1 | path2)[1]”在某些编程语言中就像一个或运算符-它将返回第一个找到的节点(不一定是来自path1的节点)。
f
frianH

它的元素有两个xpath。然后你可以编写两个 xpath,如下所示:

xpath1 | xpath2

例如:

//input[@name="username"] | //input[@id="wm_login-username"]