在for-each循环xslt中创建动态数组

时间:2014-07-24 17:48:59

标签: arrays xml xslt foreach

我正在遍历各个项目组并从每个项目中获取项目数。我需要的只是获得一个数字,我需要的数字是每个项目组中最高的项目数。我想如果我可以从返回的计数中创建一个数组,那么我可以从数组中取出第一个数据并利用该数字来进一步完成我的项目。

这是我的xml

<example>
<items>
    <item>1</item>
    <item>2</item>
    <item>3</item>
</items>
<items>
    <item>1</item>
    <item>2</item>
    <item>3</item>
    <item>4</item>
</items>
    <items>
    <item>1</item>
    <item>2</item>
    <item>3</item>
    <item>4</item>
    <item>5</item>
</items>
<items>
    <item>1</item>
    <item>2</item>
</items>

这是我的xslt

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
    <xsl:for-each select="example/items">
            <xsl:sort select="count(item)" data-type="number" order="descending"/>
            <xsl:value-of select="count(item)"/>,
    </xsl:for-each>
</xsl:template>

截至目前,这个输出在浏览器5中,         4,         3,         2, 我能够获得最高计数首先使用sort,但这些都是在每次迭代后打印到屏幕上的单独值。

如何让他们进入像(5,         4,         3,         2,)?

或者不知怎的,只是把号码5给了我。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

要输出降序排序中第一个的最高值,请使用

<xsl:template match="/">
    <xsl:for-each select="example/items">
            <xsl:sort select="count(item)" data-type="number" order="descending"/>
            <xsl:if test="position() = 1"><xsl:value-of select="count(item)"/></xsl:if>
    </xsl:for-each>
</xsl:template>

如果你想归还一些&#34;复杂的&#34;如果结构中包含所有计算的项目编号,那么您需要查看XSLT 2.0,然后您可以选择返回一系列数值或一系列存储数字的XML元素节点。在XSLT 1.0中,您可以构建存储数字的XML元素节点的结果树片段,但是要使用XPath访问它们,您需要exsl:node-set或类似。

但是在XSLT 2.0中,有max(example/items/count(item))这样的直接方式来计算最大项目数。