Cross-Browser-JavaScript-XML-Parsing

Lesezeit: 3 Minuten

Cross Browser JavaScript XML Parsing
sazr

Gibt es browser-/plattformübergreifende Möglichkeiten, XML-Dateien in Javascript zu analysieren?

  • siehe stackoverflow.com/questions/649614/xml-parsing-in-javascript

    – Mailand Jaric

    31. Oktober 2011 um 3:35 Uhr

  • Ist das nicht ein Duplikat von stackoverflow.com/questions/649614/… ?

    – Lukascaro

    13. November 2018 um 16:59 Uhr

  • Diese Frage war die früheste Anfrage für einen plattformübergreifenden XML-Parser, wurde jedoch geschlossen, da sie nicht zum Thema gehörte, da sie nach einer externen Ressource fragte (genau wie diese Frage).

    – Graham

    13. November 2018 um 23:09 Uhr


1646315706 675 Cross Browser JavaScript XML Parsing
Tim unten

Folgendes funktioniert in allen gängigen Browsern, einschließlich IE 6:

var parseXml;

if (typeof window.DOMParser != "undefined") {
    parseXml = function(xmlStr) {
        return ( new window.DOMParser() ).parseFromString(xmlStr, "text/xml");
    };
} else if (typeof window.ActiveXObject != "undefined" &&
       new window.ActiveXObject("Microsoft.XMLDOM")) {
    parseXml = function(xmlStr) {
        var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = "false";
        xmlDoc.loadXML(xmlStr);
        return xmlDoc;
    };
} else {
    throw new Error("No XML parser found");
}

Beispielnutzung:

var xml = parseXml("<foo>Stuff</foo>");
alert(xml.documentElement.nodeName);

Live-Demo:

var parseXml;

if (typeof window.DOMParser != "undefined") {
    parseXml = function(xmlStr) {
        return ( new window.DOMParser() ).parseFromString(xmlStr, "text/xml");
    };
} else if (typeof window.ActiveXObject != "undefined" &&
       new window.ActiveXObject("Microsoft.XMLDOM")) {
    parseXml = function(xmlStr) {
        var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = "false";
        xmlDoc.loadXML(xmlStr);
        return xmlDoc;
    };
} else {
    throw new Error("No XML parser found");
}

var xml = parseXml("<foo>Stuff</foo>");
document.body.innerHTML = "Root element: " + xml.documentElement.nodeName;

  • Dies funktioniert, außer im IE9 im Standardmodus. Um das Problem im IE9-Standardmodus zu beheben, müssen Sie nur Ihre anfängliche if-Anweisung so umgestalten, dass sie etwa so lautet: if (window.DOMParser && typeof XMLDocument !== “undefined”)

    – GotDibbs

    21. August 2012 um 16:09 Uhr

  • @GotDibbs: Wirklich? Das obige Beispiel funktioniert gut für mich in IE 9-Standards.

    – Tim unten

    7. September 2012 um 14:50 Uhr

  • Ja. Ich bin mir nicht sicher, ob hier eine andere Einstellung im Weg steht, aber in dem Moment, in dem ich in die Entwicklersymbolleiste gehe und den Browsermodus auf IE9 und den Dokumentmodus auf IE9-Standards umschalte, bombardiert es ohne diese zusätzliche Überprüfung.

    – GotDibbs

    7. September 2012 um 15:06 Uhr

  • @GotDibbs: Ich weiß, es ist eine Weile her, aber hier ist ein jsFiddle, das im IE 9-Standardmodus für mich gut funktioniert: jsfiddle.net/3s7Ly/1

    – Tim unten

    14. Mai 2013 um 9:53 Uhr

  • @TimDown: Wenn es sich um eine funktionierende Version handelt, würde es Ihnen etwas ausmachen, das in Ihre Antwort aufzunehmen?

    – nhahtdh

    15. Juli 2015 um 7:45 Uhr

1646315707 632 Cross Browser JavaScript XML Parsing
Alexei Levenkov

Erwägen Sie die Verwendung jQuery.parseXML.

Beachten Sie, dass der Code des alten JQuery (vor 2.x) im Wesentlichen mit dem in der akzeptierten Antwort vorgeschlagenen identisch ist und unter gefunden werden kann http://code.jquery.com/jquery-1.9.1.jsTeilversion unten:

// Cross-browser xml parsing
parseXML: function( data ) {
    ...
    try {
        if ( window.DOMParser ) { // Standard
            tmp = new DOMParser();
            xml = tmp.parseFromString( data , "text/xml" );
        } else { // IE
            xml = new ActiveXObject( "Microsoft.XMLDOM" );
            xml.async = "false";
            xml.loadXML( data );
        }
    } catch( e ) {
        xml = undefined;
    }
    ...
}

Beim Starten von JQuery 2.x-Code wurde der ActiveX-Zweig geändert, falls Sie ihn noch benötigen – verwenden Sie eine ältere Version von JQuery oder Inline-ActiveX-Parsing. Teilcode von http://code.jquery.com/jquery-2.0.0.js:

// Cross-browser xml parsing
parseXML: function( data ) {
    var xml, tmp;
    .....
    // Support: IE9
    try {
        tmp = new DOMParser();
        xml = tmp.parseFromString( data , "text/xml" );
    } catch ( e ) {
        xml = undefined;
    }
    .....
},

  • jQuery.parseXml kann ziemlich langsam sein. Ich würde vorschlagen, sich den Beitrag von @TimDown anzusehen

    – GotDibbs

    21. August 2012 um 16:08 Uhr

  • Vielleicht ist es ein Jahr her, aber wenn man sich den Quellcode von jQuery ansieht (code.jquery.com/jquery-1.9.1.js), sehe ich den Unterschied zur Antwort von TimDown nicht (wobei einige Fehlerbehandlungslogik weggelassen wird).

    – zbstof

    9. Februar 2013 um 8:15 Uhr

  • @Zotov Ich habe deinen Kommentar eingefügt (Beitrag wurde zu Recht als Nur-Link abgelehnt, und dein Kommentar schien es wert zu sein, eingefügt zu werden, anstatt den Beitrag zu löschen).

    – Alexei Levenkov

    3. Dezember 2017 um 18:02 Uhr

1646315707 997 Cross Browser JavaScript XML Parsing
Janus Troelsen

Wenn Sie große XML-Dokumente parsen müssen, die Sie möglicherweise nicht vollständig im Speicher halten können, sollten Sie einen SAX-Parser wie diesen verwenden: https://github.com/isaacs/sax-js/

924070cookie-checkCross-Browser-JavaScript-XML-Parsing

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy