如何在XSLT中声明一个序列?

时间:2013-02-14 08:58:59

标签: xslt sequence

我需要声明一个固定的数字序列。我该怎么做?

例如,是吗(我在这里猜测):

<xsl:element name="xsl:param">
    <xsl:attribute name="name">MySequence</xsl:attribute>
    <xsl:sequence>(1,2,3,4)</xsl:sequence>
</xsl:element>

<xsl:element name="xsl:param">
    <xsl:attribute name="name">MySequence</xsl:attribute>
    <xsl:sequence>1,2,3,4</xsl:sequence>
</xsl:element>

或者什么?

由于

2 个答案:

答案 0 :(得分:5)

如果你正在使用XSLT 2.0,你可以直接在select中创建序列,如:

<xsl:param name="MySequence" select="('1','2','3','4')"/>

基于XSLT的验证......

XSLT 2.0

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>
    <xsl:strip-space elements="*"/>

    <xsl:param name="seq" select="('23453','74365','98','653')"/>

    <xsl:template match="/">
        <xsl:for-each select="$seq">
            <xsl:value-of select="concat('Item ',position(),': ',.,'&#xA;')"/>
        </xsl:for-each>
    </xsl:template>

</xsl:stylesheet>

应用于任何XML输入产生:

Item 1: 23453
Item 2: 74365
Item 3: 98
Item 4: 653

答案 1 :(得分:1)

要在XSLT 2.0意义上构建序列,请使用select例如

<xsl:sequence select="1 to 4" />

但是,如果您要将值添加到元素中,您可能更喜欢value-of

<xsl:value-of select="1 to 4" separator="," />

考虑到问题中的片段,这将生成

的输出XML
<xsl:param name="MySequence">1,2,3,4</xsl:param>

这使得生成的参数的值成为逗号分隔的字符串。如果您确实希望param值成为生成的XSLT中的序列,那么您需要生成select属性而不是使用元素内容

<xsl:element name="xsl:param">
  <xsl:attribute name="name" select="'MySequence'"/>
  <xsl:attribute name="select">
    <xsl:text>(</xsl:text>
    <xsl:value-of select="1 to 4" separator=","/>
    <xsl:text>)</xsl:text>
  </xsl:attribute>
</xsl:element>

提供

的输出
<xsl:param name="MySequence" select="(1,2,3,4)" />