2009-07-01 116 views
30

我知道這是一個簡單的問題,但我無法弄清楚。 考慮下面簡單的XML文檔:從XPath中選擇排除某些元素

<root> 
    <a></a> 
    <b></b> 
    <c></c> 
    <a></a> 
    <d></d> 
    <e></e> 
    <a></a> 
    <a></a> 
</root> 

什麼是選擇節點<b>的最佳方式,通過<e>使用XPath?

我正在尋找類似

/root/*[not(a)] 

(不這樣做的伎倆)

+5

如何排除多個元素?我發現,它使用select =「* [not(self :: abc)] [not(self :: def)]」 – lwpro2 2011-05-11 04:11:37

+0

這也應該用於排除多個元素[not(abc或def)] – novice 2013-09-11 09:16:54

回答

-2

你試過:

/根/ B | /根/ C |根/ d |/root/e

+4

這就是我實施的方式。不幸的是,可能有其他節點名稱未知 – user123444555621 2009-07-01 12:11:39

6

我意識到這是一個老問題,但我最近碰到類似的問題,並使用以下xpath解決這個問題:

/root/*[not(name()='a')] 
7

回答補充一點,XPath 2.0中,你可以使用except

/root/(* except a) 

對於XPath 1.0中,託默勒格指出,這是做它的標準方式:

/root/*[not(self::a)] 

順便說一句,如果有人在這裏登陸試圖在XSLT 2.0在xsl:template/@match使用這個屬性就不會起作用,因爲@match需要的圖案,其儘管看起來像XPath表達式,都是而不是 XPath表達式。在這種情況下,XPath 1.0的解決方案將起作用。