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

时间:2010-10-01 20:46:28

标签: 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> 
...

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

4 个答案:

答案 0 :(得分:15)

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 @
  ))
]

答案 1 :(得分:7)

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

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

答案 2 :(得分:4)

  

如何选择所有实例   element_1不包含'@'   在element_5?

使用

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

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

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

我始终建议尽可能避免使用//缩写,否则可能导致XPath评估效率非常低。

答案 3 :(得分:0)

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