Arrays 如何将XSLT数组发送到模板

Arrays 如何将XSLT数组发送到模板,arrays,xml,templates,xslt-1.0,Arrays,Xml,Templates,Xslt 1.0,我需要从XML中的一个节点获取一个数据数组,然后在XSL模板中使用。 输入数据如下所示: 我需要组合节点并输出xml,如下所示: 我制作了XSLT脚本: 但它不能正常工作。例如,我可以发送到模板,如果我只使用$weight_1而不使用模板中的索引,它就可以工作。但是我不能在模板中使用$weight_1[$pos] 请告诉我如何正确使用XSLT中的数组权重?为什么不能简单地执行以下操作: <xsl:template match="period"> <perio

我需要从XML中的一个节点获取一个数据数组,然后在XSL模板中使用。 输入数据如下所示:


我需要组合节点并输出xml,如下所示:


我制作了XSLT脚本:


但它不能正常工作。例如,我可以发送到模板,如果我只使用$weight_1而不使用模板中的索引,它就可以工作。但是我不能在模板中使用$weight_1[$pos]


请告诉我如何正确使用XSLT中的数组权重?

为什么不能简单地执行以下操作:

<xsl:template match="period">
    <period number="{@number}">
        <Items>
            <xsl:for-each select="Storage/Item">
                <xsl:variable name="i" select="position()" />
                <Item weight="{@weight}" senderName="{../../Transportation/Items/Item[$i]/Sender/@name}"/>
            </xsl:for-each>
        </Items>
    </period>
</xsl:template>

(假设链接项的唯一内容是它们在父元素中的位置)


补充: 要按照开始的方式进行,您需要执行以下操作:

XSLT1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="/InpData">
    <root>
        <xsl:apply-templates select="period"/> 
    </root> 
</xsl:template>

<xsl:template match="period">
    <period number="{@number}">
        <Items>
            <xsl:apply-templates select="Transportation/Items/Item"> 
                <xsl:with-param name="weights" select="Storage/Item/@weight"/>
            </xsl:apply-templates>
        </Items>
    </period>
</xsl:template>

<xsl:template match="Item">
    <xsl:param name="weights"/>
    <xsl:variable name="i" select="position()" />
    <Item weight="{$weights[$i]}" senderName="{Sender/@name}"/>
</xsl:template>

</xsl:stylesheet>


您的输入不是XML:
不是结束标记。对不起,这是个糟糕的例子。事实上,问题是如何使数组权重作为模板“Transportation/Items/Item”中的数组工作。这是在我的实际代码中唯一不起作用的东西。非常感谢,它应该起作用,但我只是为我的问题做了一个简化的例子。事实上,XML更复杂,所以使用模板是个好主意。但如果我不能在模板中使用数组,我会尝试你的方法。我尝试了你的方法,它成功了!代码看起来比以前好多了!再次感谢你!不确定“数组”是什么意思-XML或XSLT中没有数组。我添加了另一个选项,它基本上完成了您已经开始的工作。