2013-05-07 66 views
1

組列表,所以說我有一個像這樣的節點列表:XSLT顯示節點中的2

<node value="red"> 
    <list num="1">ABC</list> 
    <list num="2">DEF</list> 
    <list num="3">GHI</list> 
</node> 
<node value="blue"> 
    <list num="4">JKL</list> 
    <list num="5">MNO</list> 
</node> 
... 

其中每個節點下的<list>項目數並不總是相同的金額。 我想輸出2組,使用xslt 1.0,顯示每個項目的組合。所以像這樣:

<node value="red"> 
    <list num="1">ABC</list> 
    <list num="2">DEF</list> 
</node> 
<node value="red"> 
    <list num="1">ABC</list> 
    <list num="3">GHI</list> 
</node> 
<node value="red"> 
    <list num="2">DEF</list> 
    <list num="3">GHI</list> 
</node> 
<node value="blue"> 
    <list num="4">JKL</list> 
    <list num="5">MNO</list> 
</node> 
... 

任何幫助將是偉大的,謝謝!

回答

2

嘗試這樣:

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

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="node"> 
     <xsl:for-each select="list"> 
      <xsl:apply-templates select="following-sibling::list" > 
       <xsl:with-param name ="l1" select="." /> 
       <xsl:with-param name ="node" select=".." /> 
      </xsl:apply-templates> 
     </xsl:for-each> 
    </xsl:template> 

    <xsl:template match="list"> 
     <xsl:param name ="l1" /> 
     <xsl:param name ="node" /> 
     <node> 
      <xsl:apply-templates select="$node/@*" /> 
      <xsl:copy-of select="$l1"/> 
      <xsl:copy-of select="."/> 
     </node> 
    </xsl:template> 

</xsl:stylesheet> 

輸入:

<?xml version="1.0" encoding="UTF-8"?> 
<xml> 
    <node value="red"> 
     <list num="1">ABC</list> 
     <list num="2">DEF</list> 
     <list num="3">GHI</list> 
    </node> 
    <node value="blue"> 
     <list num="4">JKL</list> 
     <list num="5">MNO</list> 
    </node> 
</xml> 

輸出:

<?xml version="1.0"?> 
<xml> 
    <node value="red"> 
     <list num="1">ABC</list> 
     <list num="2">DEF</list> 
    </node> 
    <node value="red"> 
     <list num="1">ABC</list> 
     <list num="3">GHI</list> 
    </node> 
    <node value="red"> 
     <list num="2">DEF</list> 
     <list num="3">GHI</list> 
    </node> 
    <node value="blue"> 
     <list num="4">JKL</list> 
     <list num="5">MNO</list> 
    </node> 
</xml>