2014-10-01 89 views
0

我有這樣的XML:轉換XML與元素,新的元素與屬性

<?xml version="1.0"?> 
<message> 
    <header> 
    <number>abc</number> 
    <headerType> 
     <code>abc</code> 
    </headerType> 
    </header> 
</message> 

這個結構,我想轉換成以下的結構,使其能夠被綁定到我的Telerik的RadTreeview控制:

<Tree> 
    <Node Text="message" Value="message"> 
     <Node Text="header" Value="header"> 
      <Node Text="number" Value="number"> 
       <Node Text="abc" Value="abc" /> 
    </Node> 
      <Node Text="headerType" Value="headerType"> 
       <Node Text="code" Value="code"> 
        <Node Text="abc" Value="abc" /> 
       </Node> 
      </Node> 
     </Node> 
    </Node> 
</Tree> 

這種轉換對於XSLT來說是否可能,如果是這樣,那麼XSLT會是什麼樣子?

+1

你的問題不清楚。請在給定示例中顯示轉換的預期結果,並解釋轉換背後的邏輯(如果它不是不言而喻 - 我懷疑它不會)。 – 2014-10-01 08:45:08

+0

另請注意,在XML中,元素名稱不能以數字開頭。 – 2014-10-01 08:58:29

+0

對不起,不清楚!我已經簡化了這些例子,並將它們放在一起。 – Mark 2014-10-01 09:26:34

回答

1

試試這樣說:

<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:strip-space elements="*"/> 

<xsl:template match="/"> 
    <Tree> 
     <xsl:apply-templates select="node()"/> 
    </Tree> 
</xsl:template> 

<xsl:template match="*"> 
    <Node Text="{local-name()}" Value="{local-name()}"> 
     <xsl:apply-templates select="node()"/> 
    </Node> 
</xsl:template> 

<xsl:template match="text()"> 
    <Node Text="{.}" Value="{.}"/> 
</xsl:template> 

</xsl:stylesheet> 

注意,沒有在給定的XML樣本屬性並就如何處理他們,如果他們沒有發現指令。

+0

似乎很好,謝謝! – Mark 2014-10-01 10:11:49