2015-05-29 98 views
0

嗨,大家好,我想申請我的follwing節點,但有兩個節點,我不會選擇。我怎樣才能避免選擇2個節點,但我怎樣才能在select中連接我的語句。我使用氧氣和xslt 2.0。XSLT如何避免選擇節點

<xsl:apply-templates select="*[not(local-name() = 'pc')] | 
    *[not(local-name() = 'computer')]"/> 

XML文件

<a/> 
    <b/> 
    <pc/> 
    <computer/> 
    <a/> 
    <b/> 
    <c/> 

等..

預期選擇的節點,, ,,,

+0

請顯示您的XML輸入示例(最好是最小化)並解釋您想要/不想選擇哪個節點。 - 一般來說,XPath 2.0允許你使用'except'運算符:http://www.w3.org/TR/xpath-functions/#func-except - 另外一般來說:除非有充分的理由阻止你因此,建議在源XML中尋址節點時使用名稱空間,而不要使用local-name()。 –

回答

2

你表達的意思是「給我的一切,是不是pc加上一切不是computer「。由於pc不是computer,反之亦然,因此|的每一側都選擇另一側排除的節點,並最終得到所有內容。你需要對同一節點測試兩個條件,說:「給我的每一個元素既不是pc也不是computer」:

<xsl:apply-templates select="*[not(local-name() = 'pc')][not(local-name() = 'computer')]"/> 

但既然你在XSLT 2.0是這可以表達更簡潔地使用命名空間通配符和except操作:

<xsl:apply-templates select="* except (*:pc, *:computer)"/> 

根據什麼(如果有的話)命名空間的文檔和樣式聲明,你可能不需要*:或者你可以用一個固定的前綴使用命名空間來取代它正確,而不是忽略它們。

+0

謝謝你多數民衆贊成;) – Franz

+0

好方法'除',加一。 –