2016-01-06 87 views
4

我有下面的XML格式:的XPath与属性不相等或不存在的元素

<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

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

+0

https://en.wikipedia.org/wiki/XPath#Predicates –

回答

8

“硬部分” 其实是容易的:基本

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

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

因此,在特定情况下,所有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"/> 

的要求。

相关问题