2012-05-18 22 views
6

Ich versuche Attribute Unterelemente zu konvertieren, dh schalten Sie wie folgt vor:Convert XML-Attribute Elemente XSLT

<WP featured="yes" player="no" dancers="no" series="logos" archive="no" fanart="no" id="eclipse_logos_"> 
    <seriesName>LOGOS</seriesName> 
    <selection>ECLIPSE</selection> 
    <imgurl>http://www.nba.com/warriors/photos/eclipse_logos_</imgurl> 
    <res>1024x1024r(iPad/iPhone)?1280x1024r(Regular)?1440x900r(Widescreen)?1920x1080r(HDTV)?1920x1200r(Widescreen)</res> 
</WP> 

In:

<WP> 
    <featured>yes</featured> 
    <player>no</player> 
    <dancers>no</dancers> 
    <series>logos</series> 
    <archive>no</archive> 
    <fanart>no></fanart> 
    <id>eclipse_logos_</id> 
    <seriesName>LOGOS</seriesName> 
    <selection>ECLIPSE</selection> 
    <imgurl>http://www.nba.com/warriors/photos/eclipse_logos_</imgurl> 
    <res>1024x1024r(iPad/iPhone)?1280x1024r(Regular)?1440x900r(Widescreen)?1920x1080r(HDTV)?1920x1200r(Widescreen)</res> 
</WP> 
+0

möglich Duplikat [Wandeln Sie alle Attribute des Knotens in untergeordneten Knoten] (http://stackoverflow.com/questions/4340272/convert-all-nodes-attributes-into-child-nodes) – hakre

Antwort

10

Versuchen Sie folgendes:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" 
> 
    <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> 
+0

hallo, sorry für die Verzögerung in meiner Antwort. vielleicht lege ich dein xslt-Stylesheet falsch an, weil ich nur eine leere Seite bekomme, wenn ich die XML-Datei in meinem Browser öffne. Ich habe Ihren Code als wallpaper.xsl gespeichert und dann ' " oben in meinem XML-Dokument. ist das falsch? – dmack

+0

Welchen Browser haben Sie benutzt? Ich habe mit Chrome und IE 9 sowohl lokal (als lokale Dateien) als auch remote (auf dem Webserver) getestet. Chrome konnte die lokale Datei nicht öffnen (sie war leer) und die Konsole (STRG + UMSCHALT + J) zeigte folgende Meldung an: 'Unsicherer Versuch, URL-Datei zu laden: /// ... aus dem Rahmen mit der URL-Datei: ///.... Domains, Protokolle und Ports müssen übereinstimmen. "Das Remote-Öffnen funktionierte auf beiden Seiten. –

+0

Um @ Baby-programmaravind Punkt, obwohl diese Lösung funktioniert, ist es ziemlich breit. Wenn die Quell-XML irgendwelche anderen Attribute außerhalb des '' Elements hätte, würden sie auch in Elemente konvertiert werden. – ABach

3

Der Code von dradu ist generisch, die Umwandlung gilt für alle Attribute, unter dem Code ist spezifischer ab out WP-Element: Nur die Attribute, die unter WP-Element stehen, werden in Elemente konvertiert.

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="@* | node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@* | node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="WP/@*"> 
    <xsl:element name="{name()}"> 
     <xsl:value-of select="."/> 
    </xsl:element> 
    </xsl:template> 
</xsl:stylesheet>