我正在嘗試計算我的轉換生成的元素(必須使用XLST1)。例如,我的轉換創建:計算在XSLT1中生成的元素
<Parent>
<ElementX Att1="2"/>
<ElementY Att1="1"/>
<ElementZ Att1="6"/>
</Parent>
我需要在同一改造內打印3,因爲有3個元素。
可以這樣做嗎?
謝謝。
我正在嘗試計算我的轉換生成的元素(必須使用XLST1)。例如,我的轉換創建:計算在XSLT1中生成的元素
<Parent>
<ElementX Att1="2"/>
<ElementY Att1="1"/>
<ElementZ Att1="6"/>
</Parent>
我需要在同一改造內打印3,因爲有3個元素。
可以這樣做嗎?
謝謝。
如果您提供了一些XSLT的提取,這將有很大的幫助。 我不給它一個XSLT代碼。我將嘗試給出一些「方法」來回答:
一種解決方案可能是將輸出存儲到nodeset(使用提供nodeset()函數的XSLT 1.0擴展)並應用XPath count()函數在這個變量上。之後,只需使用xsl:value-of輸出變量,並以相同的方式計算結果。
這裏是一個演示如何做到這一點:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ext="http://exslt.org/common" exclude-result-prefixes="ext">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:variable name="vrtfPass1">
<xsl:apply-templates/>
</xsl:variable>
<xsl:value-of select="count(ext:node-set($vrtfPass1)/*/*)"/>
</xsl:template>
<xsl:template match="/*">
<Parent>
<ElementX Att1="2"/>
<ElementY Att1="1"/>
<ElementZ Att1="6"/>
</Parent>
</xsl:template>
</xsl:stylesheet>
當這種轉變是在任何XML文檔(在此演示沒有使用),想要的,正確的結果是產生應用:
3
說明:
處理變換結果(在單個變換中)的一般方法是將它組織成,兩次傳入,我們將第一次傳遞的結果保存在變量中。
在第二步中,我們訪問結果並執行附加處理。
請注意,在XSLT 1.0中,如果捕獲第一遍結果的變量是臭名昭着的RTF(結果樹片段)類型,並且需要按照此樹中的任何節點的順序轉換爲常規樹可以訪問(xsl:copy-of
和string()
仍然可以在RTF上使用)。
此轉換爲常規樹由擴展函數完成,擴展函數通常具有名稱node-set
並始終屬於供應商定義的名稱空間。在這個演示中,我們使用屬於EXSLT命名空間的node-set()
擴展函數 - 因爲大多數XSLT 1.0處理器都實現EXSLT。
有關多通道處理的詳細信息,請參閱本:Two phase processing: Do not output empty tags from phase-1 XSLT 2.0 processing
那麼你的轉型是什麼樣子? – JLRishe 2013-03-20 15:22:24
請修改您的帖子以包含整個模板,並至少包含調用該模板的模板。 – JLRishe 2013-03-20 15:35:13