2010-12-02 99 views
1

是否有一种方法可以使用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> 

谢谢!

回答

4

测试使用Saxon6.5氧/ 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> 

这是基于使用用于元素节点的身份模板和转换属性的元素的模板。