2011-01-19 74 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> 

感謝了很多!