将属性值转换为元素

时间:2011-01-19 09:59:51

标签: xml xslt

我正在尝试转换这个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 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

这应该可以解决问题:

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

有关xsl:element的更多信息,请参阅: http://www.w3.org/TR/xslt#section-Creating-Elements-with-xsl:element

你可能想添加一些xsl:if来检查是否确实存在@cle属性,否则这应该可以正常工作

答案 2 :(得分:0)

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

这是我使用的:

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

非常感谢!