请建议,从两个值生成数字范围。
我用了电话模板方法。请指点。我正在使用XSLT 2。
XML:
<article>
<range>3-7</range>
</article>XSLT:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="//range">
<xsl:variable name="var1" select="substring-before(., '-')"/>
<xsl:variable name="var2" select="substring-after(., '-')"/>
<range>
<xsl:attribute name="ID">
<xsl:call-template name="tmpPageRange">
<xsl:with-param name="stPage" select="$var1"/>
<xsl:with-param name="lstPage" select="$var2"/>
<xsl:with-param name="presentvalue" select="$var1"/>
</xsl:call-template>
</xsl:attribute>
<xsl:value-of select="."/>
</range>
</xsl:template>
<xsl:template name="tmpPageRange">
<xsl:param name="stPage"/>
<xsl:param name="lstPage"/>
<xsl:param name="presentvalue"/>
<xsl:if test="number($stPage) < number($lstPage)">
<xsl:value-of select="concat($presentvalue, ' ')"/>
<xsl:call-template name="tmpPageRange">
<xsl:with-param name="stPage" select="number($stPage) + 1"/>
<xsl:with-param name="lstPage"/>
<xsl:with-param name="presentvalue" select="$stPage"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>必需的OutPut:
<range ID="3 4 5 6 7">3-7</range>发布于 2014-11-12 11:36:10
您可以使用以下内容:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs">
<xsl:template match="article/range">
<range>
<xsl:attribute name="ID">
<xsl:for-each select="xs:integer(tokenize(.,'-')[1]) to xs:integer(tokenize(.,'-')[2])">
<xsl:value-of select="."/>
<xsl:if test="position() != last()">
<xsl:text> </xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:attribute>
<xsl:value-of select="."/>
</range>
</xsl:template>
</xsl:stylesheet>发布于 2014-11-12 11:59:30
继政务司司长的答覆之后,XSLT2.0提供了各种快捷方式,使您可以大大缩短这些快捷方式。实际上,对于特定的需求,您可以直接将其滚动到属性值模板中:
<range ID="{xs:integer(tokenize(.,'-')[1]) to xs:integer(tokenize(.,'-')[2])}">
<xsl:value-of select="."/>
</range>AVT中将原子值序列转换为字符串的XSLT2.0规则是将每个项分别转换为一个字符串,然后输出由空格分隔的结果序列。如果您想要一个不同的分隔符(或者根本没有分隔符),那么可以使用xsl:attribute,它可以使用separator属性来覆盖默认的(单个空格)分隔符。
<range>
<xsl:attribute name="ID"
select="xs:integer(tokenize(.,'-')[1]) to xs:integer(tokenize(.,'-')[2])"
separator="," />
<xsl:value-of select="."/>
</range>会产生<range ID="3,4,5,6,7">3-7</range>
https://stackoverflow.com/questions/26885877
复制相似问题