2014-02-25 51 views
1

我有過這樣的XSLT的條件:如果沒有foo節點存在,爲什麼「foo!= 1」在xslt中的行爲與「not(foo = 1)」不同?

<xsl:if test="foo != 1"> 
    <p>This should be shown if foo doesn't equal one</p> 
</xsl:if> 

foo是這裏的標誌。如果foo是1或0,它工作正常。但是,如果沒有foo元素定義的條件返回false彷彿foo等於1

我把它改成

<xsl:if test="not(foo = 1)"> 
    <p>This should be shown if foo doesn't equal one</p> 
</xsl:if> 

並開始工作,我預計:如果沒有foo ,條件也是如此。

有人可以解釋爲什麼它是如此在XSLT。檢查節點不存在以及它沒有特定值的最佳方法是什麼?

回答

1

您的第一個聲明說:

if there is a foo element that is not 1 

這是真實的一個foo的元素必須存在,否則這是假的即使在所有

沒有foo的元素你的第二個聲明說:

if there is no foo element that is 1 

這是應該做的正確方法你想要什麼,因爲如果根本沒有foo元素也是如此

+0

你爲我釘了,謝謝。 – pati

0

使用下面的輸入

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <test> 
     <foo>1</foo> 
    </test> 
    <test> 
     <foo>0</foo> 
    </test> 
    <test> 
     <a>xxx</a> 
    </test>  
</root> 

和下面的樣式表

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="//test"> 
     <xsl:choose> 
      <xsl:when test="not(foo[.!=1])"> 
       <p>aaa</p> 
      </xsl:when> 
      <xsl:otherwise> 
       <p>bbb</p> 
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:template> 
</xsl:stylesheet> 

輸出

<?xml version="1.0" encoding="utf-8"?> 

<p>aaa</p> 

<p>bbb</p> 

<p>aaa</p> 
+0

這與所問的內容相反,因爲這裏'aaa'是Op所具有的'如果foo不顯示等於' –

+0

到達那個答案,因爲OP想要'檢查節點不存在的最好方法是什麼因爲它沒有具體的價值嗎?' –

+0

我認爲他自己發佈瞭解決方案,'not(foo = 1)'這樣做,沒有通常很難掌握的雙重否定... –

相關問題