【问题标题】:XPath contains one of multiple valuesXPath 包含多个值之一
【发布时间】:2012-08-22 14:02:27
【问题描述】:

我有简单的 xpath

 /products/product[contains(categorie,'Kinderwagens')] 

它有效,但现在我如何过滤多个类别值

喜欢

/products/product[contains(categorie,'Kinderwagens')]  +  
/products/product[contains(categorie,'Kinderwagens')] 

【问题讨论】:

    标签: xpath filter


    【解决方案1】:

    这行得通吗?

    /products/product[contains(categorie,'Kinderwagens') or contains(categorie,'Wonderwagens')]
    

    有一个类似的问题here

    【讨论】:

    • 问题是关于 OR,不是吗?
    • 自我说明。用 XPath 进步 5 年更新答案。
    【解决方案2】:

    你真的想要 contains() 吗?很多时候,人们在应该使用“=”时使用 contains() 来测试节点是否包含值。不同之处在于,如果categorie 元素具有字符串值'Kinderwagens',则categorie = 'wagens' 为假,而contains(categorie, 'wagens') 为真。

    如果你真的想要'=',那么在 XPath 2.0 中你可以写[categorie = ('Kinderwagens', 'Wonderwagens')]。如果您仍在使用 XPath 1.0,则需要使用“或”进行两次单独比较。

    【讨论】:

    【解决方案3】:

    有很多方法:

    1. //*[contains(text(), 'Kinderwagens') or contains(text(), 'Kinderwagens')]
    2. //product[contains(text(), 'Kinderwagens') or contains(text(), 'Kinderwagens')]
    3. //products/product[contains(text(), 'Kinderwagens') or contains(text(), 'Kinderwagens')]
    4. //products/product[contains(categorie, 'Kinderwagens') or contains(categorie, 'Kinderwagens')]

    注意:| (按位或) 运算符不要使用

    【讨论】:

      【解决方案4】:

      你可以像下面这样传递多个文本

      //a[contains(text(),'JB-' | 'ABC')]
      

      【讨论】:

      • 这对我不起作用。 xpath 需要稍微编辑如下://a[contains(text(),'JB-') or contains(text(), 'ABC')]
      猜你喜欢
      • 2016-10-02
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多