我有以下 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
的行都具有相同的属性值(value)。
理想的输出应该是:
<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)
有什么帮助吗?
最佳答案
“困难的部分”其实很简单:一个基本的
元素[not(@
属性= '
value ')]
谓词将排除 没有属性的元素 和 元素 < em>属性等于值。
因此,在您的特定情况下,所有 @SubID
不等于 1
的 row
元素:
/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"/>
根据要求。
关于xml - 属性不等于或不存在的元素的 XPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34632699/