xslt如何生成无类型原子序列?

时间:2012-06-28 17:40:58

标签: xslt

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

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

如何创建正确的序列?

谢谢!

2 个答案:

答案 0 :(得分: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>
如果您想要的只是一个序列,

可能会改善一些事情,但看起来相当复杂。

答案 1 :(得分: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>

表示文档节点,在这种情况下是包含单个文本节点的文档节点,其字符串内容为“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>