2012-07-16 98 views

回答

20

您可以使用正則表達式 - 如果您的XPath實現支持它 - 或寫

/item[not(@uid='id1' or @uid='id2')] 

這可能是有點短。

+1

你說得對,另一種方法如果我有兩個項目,如'id1'和'id11',它會忽略這兩個錯誤 – Aitorito 2012-07-16 08:56:34

3

也許這樣的事情?

/item[not(contains('id1 id2', @uid))] 
+1

工作,但冒險的變化,因爲'contains(x,y)'對於不存在的y是真實的。 – Arne 2012-07-16 07:50:18

+1

@Arne這一個是最短的,但在什麼情況下會失敗?我們用來過濾的屬性是一個沒有空格的唯一ID – Aitorito 2012-07-16 07:56:06

5

如果屬性名的名單很長,下面是處理這種情況一個好辦法:

//item[not(contains('|attr1|attr2|attr3|attr4|attr5|attr6|attrN|', 
        concat('|', @uid, '|') 
        ) 
      )] 
+0

我需要在.NET中構建非常長的XPath 。 而不是像LINQ聚合方法一樣使用種子,你可以簡單地用'|'連接字符串,添加尾隨和引導,並使用它。 謝謝! – Nickmaovich 2014-03-06 11:50:07

+0

@Nickmaovich,不客氣。 – 2014-03-06 15:08:13

0

至少在XPath的序列2個一般來說比較進行配對和存在性,所以你可以寫:

/item[not(@uid = ('id1','id2'))] 
相關問題