Кроссбраузерный Javascript XML Parsing [закрыто]
существуют ли кросс-браузерные / кросс-платформенные способы анализа XML-файлов в Javascript?
3 ответа:
следующий будет работать во всех основных браузерах, включая 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"); }
пример использования:
var xml = parseXml("<foo>Stuff</foo>"); alert(xml.documentElement.nodeName);
демо:
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;
рассмотрите возможность использования jQuery.parseXML.
обратите внимание, что старый код JQuery (pre 2.x) по существу идентичен одному из предложенных в принятом ответе и может быть найден по адресу http://code.jquery.com/jquery-1.9.1.js, частичная версия ниже:
// 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; } ... }
Запуск JQuery 2.X код изменен, чтобы пропустить ветку ActiveX, если она вам все еще нужна - используйте более старую версию jQuery или встроенного анализа ActiveX. Частичный код от 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; } ..... },
Если вам нужно проанализировать большие XML-документы, которые вы не можете полностью хранить в памяти, рассмотрите возможность использования синтаксического анализатора стиля SAX, такого как этот:https://github.com/isaacs/sax-js/