0

我在模板中有一个这样的循环:

    <xsl:variable name="seq">
        <xsl:sequence select="1"/>
        <xsl:sequence select="2"/>
        <xsl:sequence select="3"/>
        <xsl:sequence select="4"/>
        <xsl:sequence select="5"/>
    </xsl:variable>

    <xsl:for-each select="$seq">
        <xsl:text>(</xsl:text>
        <xsl:value-of select="."/>
        <xsl:text>)</xsl:text>
    </xsl:for-each>

我想在 $seq 的每个元素上迭代一次,产生: (1) (2) (3) (4) (5)

相反,此代码产生 (1 2 3 4 5)

如何创建正确的序列?

谢谢!

4

2 回答 2

0

包含指令且没有 as 属性的变量,如下所示:

<xsl:variable name="seq">
    <xsl:sequence select="1"/>
    <xsl:sequence select="2"/>
    <xsl:sequence select="3"/>
    <xsl:sequence select="4"/>
    <xsl:sequence select="5"/>
</xsl:variable>

表示一个文档节点,在本例中是一个包含单个文本节点的文档节点,其字符串内容为“1 2 3 4 5”。如果你想要一个由五个整数组成的序列,要么使用 select 属性,要么写

<xsl:variable name="seq" as="xs:integer*">
    <xsl:sequence select="1"/>
    <xsl:sequence select="2"/>
    <xsl:sequence select="3"/>
    <xsl:sequence select="4"/>
    <xsl:sequence select="5"/>
</xsl:variable>
于 2012-06-28T20:22:18.393 回答
0

出色地

<xsl:variable name="seq" select="1,2,3,4,5"/>

<xsl:value-of select="for $i in $seq return concat('(', $i, ')')" separator=" "/>

应该做。或者你想达到什么目的?对于你的做法

<xsl:variable name="seq" as="item()*">
        <xsl:sequence select="1"/>
        <xsl:sequence select="2"/>
        <xsl:sequence select="3"/>
        <xsl:sequence select="4"/>
        <xsl:sequence select="5"/>
    </xsl:variable>

可能会改善事情,但如果你想要的只是一个序列,看起来相当复杂。

于 2012-06-28T18:00:40.467 回答