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

Sne*_*kse 12 xml xpath filtering

鉴于这种:

<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> 
...
Run Code Online (Sandbox Code Playgroud)

如何在element_5中选择包含"@"的element_1的所有实例?

Wel*_*bog 15

element_1[not(contains(element_3/element_4/element_5,'@'))]
Run Code Online (Sandbox Code Playgroud)

这被解释为

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 @
  ))
]
Run Code Online (Sandbox Code Playgroud)


dty*_*dty 7

我的XPath有点生疏,但是像这样:

//element_1[.//element_5[not(contains(., "@"))]]
Run Code Online (Sandbox Code Playgroud)

  • 为什么会降级呢?不管你是谁,至少要礼貌地留言,说明为什么你的排名被降低。 (2认同)

Dim*_*hev 5

如何选择 element_5 中不包含“@”的所有 element_1 实例?

使用

//element_1[not(.//element_5[contains(.,'@')])]
Run Code Online (Sandbox Code Playgroud)

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

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

我总是建议在//可能的情况下始终避免使用缩写,否则这可能会导致 XPath 评估的效率非常低。