有没有办法使用XSLT 1.0
将所有节点的属性转换为子节点?
它必须与PHP的xsltProcessor
完美无瑕地运行。必须删除属性(如果可能)。
示例输入:
<root aaa="111" bbb="222" ccc="333">
<bob ddd="444" />
<data eee="555">
<steve>bar1</steve>
<john>bar2</john>
<peter fff="666">bar3</peter>
</data>
<greg ggg="777" />
</root>
期望的结果:
<root>
<aaa>111</aaa>
<bbb>222</bbb>
<ccc>333</ccc>
<bob>
<ddd>444</ddd>
</bob>
<data>
<eee>555</eee>
<steve>bar1</steve>
<john>bar2</john>
<peter>
<fff>666</fff>
bar3
</peter>
</data>
<greg>
<ggg>777</ggg>
</greg>
</root>
谢谢!
答案 0 :(得分:4)
使用Saxon6.5在Oxygen / XML上测试:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*">
<xsl:element name="{name()}"><xsl:value-of select="."/></xsl:element>
</xsl:template>
</xsl:stylesheet>
这是基于使用元素节点的标识模板和将属性转换为元素的模板。