3

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

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

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

要不然是啥?

谢谢

4

2 回答 2

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
于 2013-02-14T09:15:22.517 回答
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)" />
于 2013-02-14T09:19:46.363 回答