2016-06-28 60 views
0

我是XSLT新手。
我有一个像下面的源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吗?

+0

这是哪里相关[标签:XQuery的]毕竟?请限制为_relevant_标签。 –

回答

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

谢谢@ michael.hor257k。这个wrks。还有一个疑问,是否有任何方法将字符串的日期转换为xsd:date sourceXML: 2016-07-08T02:05:58.058Z targetXML必须有 2016-07-08 + 05:58。在源代码中,它是字符串,目标期望它是xsd:date。有什么建议么。 –

+0

我确定有 - 但请将其作为一个新问题发布。 –

+0

我对上述xsl的执行有疑问。如何进行executon发生的“的 0”> 的 <传递ID =” p {$ N} “> 的 '是否模板将被首先调用,或者pass标签将被执行,然后模板被调用。建议任何教程xslt。谢谢 –