xslt将子属性作为元素移动到父节点

时间:2013-01-08 13:53:39

标签: xslt

我想将子节点属性作为元素移动到父元素。 对于前 更改以下xml

<Parent>
 <Children>
 <Child key="Name">ABC</Child>
 <Child key="Age">8</Child>
 <Child key="Height">140</Child>
 <Child key="Class">6</Child>
 </Children>
</Parent>

<Parent>
 <Name>ABC</Name>
 <Age>8</Age>
 <Height>140</Height>
 <Class>6</Class>
</Parent>

希望我的问题很清楚......

2 个答案:

答案 0 :(得分:1)

<xsl:template match="Parent">
  <xsl:copy>
    <xsl:apply-templates select="Children/Child"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="Children/Child[@key]">
  <xsl:element name="{@key}">
    <xsl:value-of select="."/>
  </xsl:element>
</xsl:template>

<xsl:output indent="yes"/>

应该足够了。

答案 1 :(得分:0)

这种竞争和短暂的转变

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/*">
     <Parent>
      <xsl:apply-templates/>
     </Parent>
 </xsl:template>

 <xsl:template match="Child">
   <xsl:element name="{@key}"><xsl:apply-templates/></xsl:element>
 </xsl:template>
</xsl:stylesheet>

应用于提供的XML文档时:

<Parent>
 <Children>
 <Child key="Name">ABC</Child>
 <Child key="Age">8</Child>
 <Child key="Height">140</Child>
 <Child key="Class">6</Child>
 </Children>
</Parent>

会产生想要的正确结果:

<Parent>
   <Name>ABC</Name>
   <Age>8</Age>
   <Height>140</Height>
   <Class>6</Class>
</Parent>