xml - 属性不等于或不存在的元素的 XPath

标签 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 的行都具有相同的属性值(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 不等于 1row 元素:

/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/

相关文章:

android - 无法滚动 ListView

xml - XSLT 删除标签但保留内容

xml - 在浏览器中显示 UML

android - alignParentBottom 在模拟器中工作,但不在设备上工作

python - 如何使用xpath获取最高页码?

python - 用lxml解析html(标签h3)

php/xpath : Getting the content in nested divs

java - java中的xml文件

java - Java 中的 XPath 节点集

xpath - 使用 xpath 查找倒数第二个节点