2010-06-21 101 views
1

是否可以使用XSL 1.0進行轉換?如果可以,請發佈一些示例代碼,這可以讓我開始朝正確的方向發展。XSL 1.0轉換到合併節點

<Region> 
<RecType1><Amt> 100 </Amt></RecType1><RecType2><Name>XXX</Name></RecType2><RecType1><Amt> 200 </Amt></RecType1><RecType2><Name>YYY</Name></RecType2><RecType1><Amt> 300 </Amt></RecType1><RecType2><Name>ZZZ</Name></RecType2></Region> 

TO

<Region> 
<Payment><Amt>100</Amt><Name>XXX</Name></Payment><Payment><Amt>200</Amt><Name>YYY</Name></Payment><Payment><Amt>300</Amt><Name>ZZZ</Name></Payment></Region> 
+0

好問題(1)。查看我的答案獲得完整的解決方案。 – 2010-06-21 22:34:56

回答

0

該轉化

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

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

<xsl:template match="RecType1"> 
    <Payment> 
    <xsl:apply-templates select="* | following-sibling::RecType2[1]/*"/> 
    </Payment> 
</xsl:template> 

<xsl:template match="RecType2"/> 
</xsl:stylesheet> 

當所提供的XML文檔施加(縮進是可讀的):

<Region> 
    <RecType1> 
     <Amt> 100 </Amt> 
    </RecType1> 
    <RecType2> 
     <Name>XXX</Name> 
    </RecType2> 
    <RecType1> 
     <Amt> 200 </Amt> 
    </RecType1> 
    <RecType2> 
     <Name>YYY</Name> 
    </RecType2> 
    <RecType1> 
     <Amt> 300 </Amt> 
    </RecType1> 
    <RecType2> 
     <Name>ZZZ</Name> 
    </RecType2> 
</Region> 

產生所需的結果(也縮進是可讀的):

<Region> 
    <Payment> 
     <Amt> 100 </Amt> 
     <Name>XXX</Name> 
    </Payment> 
    <Payment> 
     <Amt> 200 </Amt> 
     <Name>YYY</Name> 
    </Payment> 
    <Payment> 
     <Amt> 300 </Amt> 
     <Name>ZZZ</Name> 
    </Payment> 
</Region>