我有以下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)
任何帮助?
答案 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"/>
按要求。