基于XSLT中的值创建元素

时间:2016-06-28 21:06:51

标签: xml xslt xpath xslt-1.0

我是XSLT的新手    我有一个源XSLT,如下所示。

<?xml version="1.0" encoding="UTF-8"?> 
   <root>
      <child-value>3</child-value>
   </root>

我的目标应该有类似下面的内容

<?xml version="1.0" encoding="UTF-8"?> 
 <pass_details>
    <pass id ='p1'>1</pass>
    <pass id ='p2'>2</pass>
    <pass id ='p3'>3</pass>
 </pass_details>

<pass>代码的数量应该基于child-value代码的值? 任何人都可以帮助xslt吗?

1 个答案:

答案 0 :(得分:4)

如果您仅限于XSLT 1.0,则必须调用递归模板来生成pass元素:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/root">
    <pass_details>
        <xsl:call-template name="gen">
            <xsl:with-param name="n" select="child-value"/>
        </xsl:call-template>
    </pass_details>
</xsl:template>

<xsl:template name="gen">
    <xsl:param name="n"/>
    <xsl:if test="$n > 0">
        <xsl:call-template name="gen">
            <xsl:with-param name="n" select="$n - 1"/>
        </xsl:call-template>
        <pass id="p{$n}">
            <xsl:value-of select="$n"/>
        </pass>
    </xsl:if>   
</xsl:template>

</xsl:stylesheet>