2013-02-14 69 views
3

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

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

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

还是什么?

感谢

+0

输出这是一个有点混乱一select属性。你为什么要创建一个名为'xsl:param'的元素?你是从样式表生成样式表吗? – 2013-02-14 09:08:53

+0

这是一个很长的故事,但基本上这将与Schematron一起使用(我希望不要进入)。你知道这个问题的答案吗?谢谢 – CompanyDroneFromSector7G 2013-02-14 09:12:13

回答

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

看起来不错。只是检查 - 将声明一个序列而不是一个包含逗号分隔列表的字符串? – CompanyDroneFromSector7G 2013-02-14 09:23:21

+0

@bukko - 是的。请参阅我的更新以获取示例验证。 – 2013-02-14 09:31:40

+0

@bukko - 再次更新以包含对Ian Roberts的回答评论中提及的“随机”数字的示例。 – 2013-02-14 09:34:47

1

要在XSLT 2.0感建立一个序列您使用select例如

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

但是,如果您要添加值的元素你可能会喜欢value-of

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

鉴于问题的片段,这将产生

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

输出XML哪使生成的param的值为逗号分隔的字符串。如果你真的想param值是在生成的XSLT的顺序,那么你需要生成的,而不是使用元素含量

<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)" /> 
+0

谢谢。有没有办法做到这一点随机数字?例如23453,74365,98,653 – CompanyDroneFromSector7G 2013-02-14 09:24:29

+0

@bukko我已经添加了一些更多的细节。如果你实际上并没有使用序列构造函数,那么你可以直接使用这个值:'' – 2013-02-14 09:38:27