2010-12-02 7 views
1

Y at-il un moyen de convertir les attributs de tous les nœuds en nœuds enfants en utilisant XSLT 1.0? Il doit fonctionner parfaitement avec PHP xsltProcessor. Les attributs doivent être supprimés (si possible).Convertir les attributs de tous les nœuds en nœuds enfants

entrée Exemple:

<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> 

Le résultat souhaité:

<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> 

Merci!

Répondre

4

testées sur Oxygen/XML utilisant Saxon6.5:

<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> 

Ceci est basé sur l'utilisation d'une matrice d'identité pour les noeuds d'élément et d'une matrice qui convertit les attributs des éléments.

Questions connexes