代码之家  ›  专栏  ›  技术社区  ›  Snekse Kevin Bourrillion

xPath:仅当子元素不包含特定值时才选择父元素

  •  12
  • Snekse Kevin Bourrillion  · 技术社区  · 16 年前

    鉴于此:

    <element_1> 
        <element_2>Text</element_2> 
        <element_3> 
            <element_4> 
                <element_5>Text with @ in Value</element_5> 
            </element_4> 
            <element_4> 
                <element_5>Test Text</element_5> 
            </element_4> 
        </element_3> 
        <element_6> 
            <element_7> 
                <element_8>0</element_8> 
    ...
    

    如何选择元素1的所有实例 不

    4 回复  |  直到 16 年前
        1
  •  15
  •   Welbog    16 年前
    element_1[not(contains(element_3/element_4/element_5,'@'))]
    

    这被解释为

    element_1[                          #select elements named "element_1"
      not(contains(                     #that do not contain
        element_3/element_4/element_5,  #children in this hierarchy
        '@'                             #the character @
      ))
    ]
    
        2
  •  7
  •   dty    16 年前

    我的XPath有点生疏,但类似这样:

    //element_1[.//element_5[not(contains(., "@"))]]
    
        3
  •  5
  •   Mads Hansen    16 年前

    如何选择的所有实例 不包含'@'的元素\u 1

    使用

    //element_1[not(.//element_5[contains(.,'@')])]
    

    在英语中,这意味着 :全选 "element_1" 文档中没有 "element_5" 其字符串值包含该字符串的后代 '@' .

    我用的是 // 缩写只是因为XML文件的结构不清楚。

    我总是建议避免使用

        4
  •  0
  •   John Kugelman Michael Hodel    16 年前
    element1[not(contains(.//element_5, '@'))]
    
    推荐文章