不同节点的XPath OR运算符

use*_*008 131 xpath

我该怎么做XPath:

//bookstore/book/title or //bookstore/city/zipcode/title
Run Code Online (Sandbox Code Playgroud)

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

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

Ste*_*han 202

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

版本1:

//title[parent::zipcode|parent::book]
Run Code Online (Sandbox Code Playgroud)

版本2:

//bookstore/book/title|//bookstore/city/zipcode/title
Run Code Online (Sandbox Code Playgroud)

  • @ user569008:`|`是[union set operator](http://www.w3.org/TR/xpath/#node-sets). (18认同)
  • "|" 在XPath中它实际上不是"OR运算符".它允许您构建由整个XML树的子集组成的节点集."// book | // cd"表示在所有子节点和根节点的后代中找到所有名为'book'的子节点,然后查找所有名为'cd'的子节点.如果在根节点的下降中只有书籍节点,则您的节点集将仅包含书籍节点.如果在根节点的下降中只有cd节点,则您的节点集将仅包含cd节点.如果在根节点的下降中同时存在book和cd节点,则节点集将包含book和cd节点. (4认同)
  • 逻辑运算符(OR,XOR,AND)在每种编程语言中都是相同的,但自然语言对它们的解释略有不同.在讨论与它们相关的问题时,最好消除歧义.此外,使用XPath时,最好不要将结果视为**为_a或b _**,而是将**定位为_a或b _**.逻辑"或"表示可以通过"a"或"b"或"两者"来定位.[逻辑`xor`(eXclusive OR)](/sf/answers/455080601/)意味着它可以通过`a a或b,但不是两者`来定位.逻辑"和"意味着它可以通过"a和b"来定位. (3认同)

azu*_*kin 49

如果要仅使用union运算符选择两个节点中的一个,则可以使用此解决方案: (//bookstore/book/title | //bookstore/city/zipcode/title)[1]

  • @Anthony 整个构造“(path1 | path2)[1]”在某些编程语言中的作用类似于 or 运算符-它将返回第一个找到的节点(不一定是来自 path1 的节点)。 (2认同)

Sub*_*sad 10

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

xpath1 | xpath2

例如:

//input[@name="username"] | //input[@id="wm_login-username"]
Run Code Online (Sandbox Code Playgroud)