2016-06-28 61 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。謝謝 –