XSL查找并将属性转换为元素

时间:2014-07-11 14:19:15

标签: xml xslt

我有一个XML文件,其中包含属性内的数据,只是泛型元素中的一个属性。

<main>
  <tag aaa="p1"/>
  <tag aaa="p2"/>
  <tag bbb="p3"/>
</main>

我想使用XSL将属性更改为元素,因此在此示例中,我将获得以下内容:

<main>
  <aaa>p1</aaa>
  <aaa>p2</aaa>
  <bbb>p3</bbb>
</main>

我事先并不知道属性名称;我想对任何这样的属性名称一般这样做 结构的其余部分是常量 - 一个元素中的一个属性。

如何捕获并转换所有这些属性?

1 个答案:

答案 0 :(得分:1)

更新:要使其在通用+嵌套结构中工作(并假设存在固定的根元素),从identity开始并处理每个元素的属性:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="@*|node()">
      <xsl:copy>
         <xsl:apply-templates select="@*|node()"/>
      </xsl:copy>
   </xsl:template>

   <xsl:template match="*[ancestor::*]">
      <xsl:for-each select="attribute::*">
         <xsl:element name="{local-name()}">
            <xsl:value-of select="."></xsl:value-of>
         </xsl:element>
      </xsl:for-each>
      <xsl:apply-templates select="node()" />
   </xsl:template>
</xsl:stylesheet>

来变换:

<main>
   <tag aaa="p1">
      <nestedtag a1="xx" a2="yy"></nestedtag>
   </tag>
   <moretag aaa="p2"/>
   <anothertag bbb="p3"/>
</main>

要:

<main>
   <aaa>p1</aaa>
      <a1>xx</a1><a2>yy</a2>
   <aaa>p2</aaa>
   <bbb>p3</bbb>
</main>