我正在尋找一種優雅的方式來從一個子模板返回多個值。xslt V1.0 - 從子模板返回多個值的最簡單方法
爲什麼? - 我有一個遞歸循環的子模板,返回XML中節點的最大值。我還需要最小值和我可以從同一子模板獲得的節點總數。我不wonna循環3次,表現不是很好:)
解決方案,我發現迄今:
- 創建3個值,我需要的字符串,並讓他們的子字符串。
- ...
我使用XSL 1.0
感謝
我正在尋找一種優雅的方式來從一個子模板返回多個值。xslt V1.0 - 從子模板返回多個值的最簡單方法
爲什麼? - 我有一個遞歸循環的子模板,返回XML中節點的最大值。我還需要最小值和我可以從同一子模板獲得的節點總數。我不wonna循環3次,表現不是很好:)
解決方案,我發現迄今:
我使用XSL 1.0
感謝
它可能不是很方便訪問每個許多(說幾百個)的結果在一個字符串呈現。
這是XML和XPath的力量可以被最好地看到和利用的地方:產生一個XML樹作爲結果。
下面是一個例子:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<xsl:call-template name="sequenceStatistics">
<xsl:with-param name="pSeq" select="*"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="sequenceStatistics">
<xsl:param name="pSeq"/>
<xsl:variable name="vCount" select="count($pSeq)"/>
<results>
<count><xsl:value-of select="$vCount"/></count>
<xsl:for-each select="$pSeq">
<xsl:sort data-type="number"/>
<xsl:choose>
<xsl:when test="position() = 1">
<min><xsl:value-of select="."/></min>
</xsl:when>
<xsl:when test="position() = $vCount">
<max><xsl:value-of select="."/></max>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</results>
</xsl:template>
</xsl:stylesheet>
當在下面的XML文檔施加這種轉變:
<nums>
<num>7</num>
<num>3</num>
<num>9</num>
<num>10</num>
<num>4</num>
<num>2</num>
<num>5</num>
<num>08</num>
<num>6</num>
<num>1</num>
</nums>
有用,正確的結果產生:
<results>
<count>10</count>
<min>1</min>
<max>10</max>
</results>
請注意:
如果結果是一個可變的身體,變量類型爲RTF(結果樹片段),它必須使用xxx:node-set()
功能之前被轉換成正則樹結果的節點可以單獨訪問。在XPath 2.0(XSLT 2.0)中沒有這樣的限制。
如本例所示,無需遞歸即可產生序列的最大值和最小值 - 即使在XSLT 1.0中也是如此。
要嘗試這個並向你報告:) –
使用排序的+1。 –
它工作完美,並感謝您的注意! –
好問題,+1。查看我的答案,提供多種結果的另一種方式,這更方便,更自然,尤其是在結果數量很大的情況下。 –