我有一个XML文件,其中包含属性内的数据,只是泛型元素中的一个属性。
<main>
<tag aaa="p1"/>
<tag aaa="p2"/>
<tag bbb="p3"/>
</main>
我想使用XSL将属性更改为元素,因此在此示例中,我将获得以下内容:
<main>
<aaa>p1</aaa>
<aaa>p2</aaa>
<bbb>p3</bbb>
</main>
我事先并不知道属性名称;我想对任何这样的属性名称一般这样做 结构的其余部分是常量 - 一个元素中的一个属性。
如何捕获并转换所有这些属性?
答案 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>