不同节点的 XPath OR 运算符

Posted

技术标签:

【中文标题】不同节点的 XPath OR 运算符【英文标题】:XPath OR operator for different nodes 【发布时间】:2011-07-18 01:33:24 【问题描述】:

如何使用 XPath:

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

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

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

【问题讨论】:

OR 包含双方。您正在寻找的是 XOR 运算符。您将 OR 一词的英语用法与逻辑运算符混为一谈。 在这种情况下,使用 orxor 没有区别,因为不可能同时匹配两边。 【参考方案1】:

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

版本 1:

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

版本 2:

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

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

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

or - 在 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。逻辑or 表示它可以通过a or b or both 定位。 Logical xor (eXclusive OR) 表示它可以通过either a or b, but not both 定位。逻辑and 表示它可以通过both a and b 定位。【参考方案2】:

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

【讨论】:

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

它的元素有两个xpath。然后你可以像下面这样写两个xpath:

xpath1 | xpath2

例如:

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

【讨论】:

以上是关于不同节点的 XPath OR 运算符的主要内容,如果未能解决你的问题,请参考以下文章

XPath

Xpath语法

XPath 选取未知节点 & 选取若干路径

Python解析库lxml与xpath用法总结

Python爬虫:通过爬取CSDN博客信息,学习lxml库与XPath语法

Python爬虫:通过爬取CSDN博客信息,学习lxml库与XPath语法