2012-03-29 15 views
1

Ich lade eine XML-Datei mit jQuery $ .get. Nachdem ich den Inhalt geladen habe, kann ich ihn manipulieren und die Xml-Knoten mit .append() an meine eigenen Elemente anhängen. dies funktioniert auf Chrome und Firefox, aber nicht auf IE8.jQuery XML Parsing/Manipulation IE8 Fehler

Beispiel für XML-Datei:

<THEMES> 
    <THEME id="city"> 
    <ASSETS ui="game/city"> 
     <ASSET package_id="title_screen"  file="title_screen.swf" /> 
     <ASSET package_id="backgrounds"   file="cartoon_buildings.swf" /> 
     <ASSET package_id="stand"    file="stand.swf" /> 
    </ASSETS> 
    </THEME> 
</THEMES> 

Ich brauche alle das Thema Knoten zu lösen und sie zu meinem eigenen Objekt anhängen.

hier ist die Essenz meines Codes:

var themes = $("<themes></themes>"); 
    $.get('url/themes.xml', function(data, textStatus, jqXHR) { 
     var xml = data;   
     themes.append($(xml).children("themes").children('theme')); 
    }, 'xml'); 

Der Fehler auf der themes.append Linie tritt nur auf IE, und das ist, was das Protokoll zeigt:

Keine Schnittstelle nicht unterstützt

Kann ich XML-Elemente im IE nicht manipulieren und anhängen?

Antwort

2

Es gibt zwei Probleme:

  1. Aus der Dokumentation:

    Query (html [, ownerdocument])
    html: Eine Zeichenfolge von HTML zum Erstellen im laufenden Betrieb. Beachten Sie, dass dies HTML, nicht XML analysiert.

  2. IE akzeptiert nach der DOM-Spezifikation das Verschieben von Knoten zwischen Dokumenten nicht.

Dies behebt beide Probleme und arbeitet auch für mich in IE:

//themes will be a jQuery-Object containing the documentElement 
    var themes = $($.parseXML("<themes></themes>").getElementsByTagName('*')[0]); 

    $.get('url/themes.xml', function(data, textStatus, jqXHR) { 
     var xml = $($.parseXML(data));  
     themes.append(xml.children("themes").children('theme'));   
    }, 'text' 
); 
+0

Diese wizardry irgendeiner Art ist! (Das funktioniert, danke) – Rodik

4

versuchen, das holen XML-Element auf diese Weise zu serialisiert:

function xml2Str(xmlNode) 
{ 
    try { 
    // Gecko-based browsers, Safari, Opera. 
    return (new XMLSerializer()).serializeToString(xmlNode); 
    } 
    catch (e) { 
    try { 
     // Internet Explorer. 
     return xmlNode.xml; 
    } 
    catch (e) 
    {//Strange Browser ?? 
    alert('Xmlserializer not supported'); 
    } 
    } 
    return false; 
}