属性不相等或不存在的元素的XPath

时间:2016-01-06 12:02:36

标签: xml xpath

我有以下XML格式:

<test>
 <table>
   <rows>
     <row ID = "1" Name ="A"/>
     <row ID = "2" SubID = "1" Name ="B"/>
     <row ID = "3" Name ="C"/>
     <row ID = "4" SubID = "1" Name ="D"/>
     <row ID = "5" Name ="E"/>
     <row ID = "4" SubID = "2" Name ="E"/>
   </rows>
   .
   .
 </table>
</test>

我想要除了SubID = 1之外的所有行。

难点在于,并非所有行都具有名为SubID的属性,而且并非具有属性SubID的所有行都具有相同的值

理想的输出应该是:

<row ID = "1" Name ="A"/>
<row ID = "3" Name ="C"/>
<row ID = "5" Name ="E"/>
<row ID = "4" SubID = "2" Name ="E"/>

我试图使用一个否定价值的XPath,但这不会起作用:

/test/table/row/not(@SubID=1)

任何帮助?

1 个答案:

答案 0 :(得分:19)

&#34;困难部分&#34;实际上很简单:一个基本的

元素 [not(@ 属性 = ' ')]

如果没有属性 元素

谓词将排除 元素 < em> attribute 等于 value

因此,在您的具体情况下,所有row元素都没有@SubID等于1

/test/table/rows/row[not(@SubID = '1')]

选择

<row ID="1" Name="A"/>
<row ID="3" Name="C"/>
<row ID="5" Name="E"/>
<row ID="4" Name="E" SubID="2"/>

按要求。