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

Joh*_*ohn 10 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>
Run Code Online (Sandbox Code Playgroud)

我想把除了那些之外的所有行都带走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"/>
Run Code Online (Sandbox Code Playgroud)

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

/test/table/row/not(@SubID=1)
Run Code Online (Sandbox Code Playgroud)

有帮助吗?

kjh*_*hes 20

"困难的部分"实际上很简单:一个基本的

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

谓词将排除 元件而不属性 元素为其属性等于.

因此,在您的特定情况下,所有row@SubID等于的元素1:

/test/table/rows/row[not(@SubID = '1')]
Run Code Online (Sandbox Code Playgroud)

选择

<row ID="1" Name="A"/>
<row ID="3" Name="C"/>
<row ID="5" Name="E"/>
<row ID="4" Name="E" SubID="2"/>
Run Code Online (Sandbox Code Playgroud)

按照要求.