代码之家  ›  专栏  ›  技术社区  ›  LesterDove

在XPath中通过属性名选择多个元素的更好方法

  •  4
  • LesterDove  · 技术社区  · 14 年前

    我希望基于一个ID名称数组来选择一个元素集合。我现在用的是一个巨大的或基本上是:

    //*[@id='apple']|//*[@id='orange']|//*[@id='banana']
    

    "WHERE IN [a,b,c]"

    我正在使用HTTPAgilityPackASP.Net我认为这等同于XPath1.o(请随时纠正我的错误)

    谢谢。

    2 回复  |  直到 14 年前
        1
  •  5
  •   John Kugelman Michael Hodel    14 年前

    首先,您可以使用 or //* 多次,尽管您指定 @id=

    //*[@id='apple' or @id='orange' or @id='banana']
    

    一个更优雅的解决方案是对照可接受的id列表进行检查。现在,如果您使用的是XPath1.x,那么您需要做一些练习才能获得contains()来完成您的请求。具体地说,请注意,我在第一个字符串的两端都有空格,然后将空格连接到字符串的两端 @id 在寻找匹配之前。这是为了防止 @身份证 属于 "range" 例如,从匹配。

    //*[contains(' apple orange banana ', concat(' ', @id, ' '))]
    

    //*[exists(index-of(('apple', 'orange', 'banana'), @id))]
    
        2
  •  4
  •   Dimitre Novatchev    14 年前

    :

    //*[contains('|apple|banana|orange|', concat('|',@id, '|'))]
    

    以防 id "|" 字符,则使用另一个已知不存在于任何

    XPath2.0解决方案 :