【问题标题】:Create dynamic array in for-each loop xslt在for-each循环xslt中创建动态数组
【发布时间】:2014-07-24 17:48:59
【问题描述】:

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

这是我的 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、 我能够获得最高计数首先使用排序,但这些都是在每次迭代后打印到屏幕上的单独值。

我怎样才能让它们变成可用的东西,比如 (5, 4、 3、 2,)?

或者以某种方式将数字 5 还给我。

任何帮助将不胜感激。

【问题讨论】:

    标签: arrays xml xslt foreach


    【解决方案1】:

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

    <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>
    

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

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

    【讨论】:

    • 拿到我的号码了!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2014-11-06
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多