2013-10-18 60 views
0

請幫忙寫的xsl:XSL:XML轉換爲輸出與XSL

我有了這個XML:

<?xml version="1.0" encoding="utf-8"?> 
<root> 
<Table name = "My table1"> 
<Row isHeader="True"> 
<Cell val ="Header1"> </Cell> 
<Cell val ="Header2"> </Cell> 
<Cell val ="Header3"> </Cell> 
</Row> 
<Row isHeader="False"> 
<Cell val ="Data2.1"> </Cell> 
<Cell val ="Data2.2"> </Cell> 
<Cell val ="Data2.3"> </Cell> 
</Row> 
<Row> 
<Cell val ="Data3.1"> </Cell> 
<Cell val ="Data3.2"> </Cell> 
<Cell val ="Data3.3"> </Cell> 
</Row> 
</Table> 
</root> 

的輸出:第一行包含標題。

<?xml version="1.0" encoding="utf-8"?> 
<items> 
<item>Header1=Data2.1 Header2=Data2.2 Header3=Data2.3 </item> 
<item>Header1=Data3.1 Header2=Data3.2 Header3=Data3.3 </item> 
</items> 

非常感謝您的幫助!

+0

看來,輸入XML不寫在這個問題上,假設輸出XML是在下面的框中的代碼「輸出:」 – condiosluzverde

+0

對不起!源xml在這裏! – user2896623

回答

0
<xsl:template match="Table"> 
<xsl:variable name='headers' select="Row[1]"/> 
<xsl:for-each select="remove(Row, 1)"> 
    <item><xsl:value-of 
      select="for $i in 1 to count($headers/Cell) 
        return concat($headers/Cell[$i], '=', Cell[$i])"/> 
    </item> 
</xsl:for-each> 
</xsl:template> 

未經測試。

+0

我相信你需要一個''元素。 – JLRishe

+0

我喜歡爲讀者留下一點練習。 –

1

這裏是我的建議:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:output indent="yes"/> 

<xsl:template match="Table"> 
    <items> 
    <xsl:variable name="headers" select="Row[1]/Cell/@val"/> 
    <xsl:for-each select="Row[position() gt 1]"> 
     <item> 
     <xsl:for-each select="Cell"> 
      <xsl:if test="position() gt 1"><xsl:text> </xsl:text></xsl:if> 
      <xsl:variable name="pos" select="position()"/> 
      <xsl:value-of select="concat($headers[$pos], '=', @val)"/> 
     </xsl:for-each> 
     </item> 
    </xsl:for-each> 
    </items> 
</xsl:template> 

</xsl:stylesheet>