2011-01-19 73 views
3

我想这个XML转换:转换属性值成元素

<tokens> 
<token cle="a"> 
    <token cle="b">nomX</token> 
    <token cle="c">prenomX</token> 
    <token cle="d">villeX</token> 
</token> 
<token cle="a"> 
    <token cle="b">nomY</token> 
    <token cle="c">prenomY</token> 
    <token cle="d">villeY</token> 
</token> 
<token cle="e">nomZ</token> 
</tokens> 

这个XML:

<tokens> 
<a> 
    <b>nomX</b> 
    <c>prenomX</c> 
    <d>villeX</d> 
</a> 
<a> 
    <b>nomY</b> 
    <c>prenomY</c> 
    <d>villeY</d> 
</a> 
<e>nomZ</e> 
</tokens> 

这样的属性值转换成元素,但我需要保持整个结构和deph。

我试过使用XSL,但是我还没有成功。 如果有人有一个想法,它将不胜感激。

Thx。

回答

3

所以XSLT是正确的方式,我认为:

<?xml version="1.0" encoding="UTF-8"?> 
<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:template match="@* | node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@* | node()" /> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="token"> 
     <xsl:element name="{@cle}"> 
      <xsl:apply-templates /> 
     </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 
0

这应该做的伎俩:

<xsl:template match="token"> 
    <xsl:element name="{@cle}"> 
    <xsl:apply-templates select="*|@*"/> 
    </xsl:element> 
</xsl:template> 

有关XSL的详细信息:元素看: http://www.w3.org/TR/xslt#section-Creating-Elements-with-xsl:element

你可能想添加一些XSL:如果以检查是否真的有@cle属性,否则这应该做工精细

+0

没有这个工作根本没有:首先你失去了令牌的内容,你必须为元素名称{@ arround @cle}。 – lweller 2011-01-19 10:25:02

+0

您好thx快速响应,它真的帮我找到答案这里是我使用: \t \t \t \t \t的 \t \t \t TbtV2 2011-01-19 10:27:31

0

我用你的答案找到合适的xsl:

这里是我使用:

<xsl:template match="token"> 
     <xsl:element name="{@cle}"> 
      <xsl:apply-templates/> 
     </xsl:element> 
    </xsl:template> 

感谢了很多!