2011-04-21 35 views
0

我有一個工作的樣式表,與saxon.Now工作正常,我使用簡單的XQuery:XQuery的錯誤做當XSLT轉換

transform:transform($xmlNode, $xslNode,()), 

做同樣的事情,它總是抱怨在一個語法我的樣式表,這就是:

<xsl:template match="CrossReference "> 
    <xsl:variable name="currentNode" select="//*[@[email protected]]"/> 
    <xsl:if test="$currentNode/name()!= 'Figure'"> 

      ... 
     </xsl:if> 
</xsl:template> 

它總是抱怨行,該消息是「在編譯樣式表時發生異常:未知NODETYPE:名稱」。 似乎無法理解函數名稱()?

任何人都可以幫忙嗎?謝謝。

回答

2

您不能在XPath 1.x中將函數調用用作路徑的一部分(即斜槓/之後)。要解決此問題,內置XPath函數通常接受節點集作爲參數,如果省略參數,則默認爲.。也就是說,name()name(.)的簡寫。

試試這個:

<xsl:if test="name($currentNode) != 'Figure'"> 
+0

大,工作。但我想知道爲什麼我的原始語法在撒克遜工作? – Kevin 2011-04-21 17:51:57

+2

當您在Saxon中運行它時,您使用的是XSLT 2.0處理器。您從XQuery運行它時不會說出正在運行的內容,但錯誤消息表明它是XSLT 1.0處理器。在XSLT 2.0中允許語法a/name(),但不在1.0中。因爲誤導而降低迴應。 – 2011-04-21 21:23:35