2014-10-01 78 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