jQuery.parseXML( data ) 接受一个格式良好的 XML 字符串,返回解析后的 XML 文档。
方法 jQuery.parseXML() 使用浏览器原生的 XML 解析函数实现。
在 IE 9+ 和其他浏览器中,会使用 DOMParser 对象解析; 在 IE 9 以下的浏览器中,则使用 ActiveXObject 对象解析
源码分析
// Cross-browser xml parsing parseXML: function( data ) { var xml, tmp; 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; } if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { jQuery.error( "Invalid XML: " + data ); } return xml; },
首先针对IE(9以下)和W3C标准进行区分处理,对于W3C浏览器而言采用标准的解析对象DOMParser,下面针对此对象进行扩展
//DOMParser 对象解析 XML 文本并返回一个 XML Document 对象。//要使用 DOMParser,使用不带参数的构造函数来实例化它,然后调用其 parseFromString() 方法:var doc = (new DOMParser()).parseFromString(text)
parseFromString定义如下
//text 参数是要解析的 XML 标记//contentType 是文本的内容类型。可能是 "text/xml" 、"application/xml" 或 "application/xhtml+xml" 中的一个。注意,不支持 "text/html"parseFromString(text, contentType)
IE采用的ActiveXObject对象解析xml,这个特定于 IE 的方法解析指定的 XML 文本串,然后在当前文档对象中构建一棵 DOM 节点树,而丢弃此前存在于文档中的任何节点。
这个方法在表示 HTML 文档的Document对象上并不存在。在调用 loadXML() 之前,通常创建一个新的、空的Document对象来保存解析的内容:
var doc = new ActivexObject ("MSXML2.DOMDocument");doc.loadXML(markup);
IE9以下浏览器解析后返回的是Document对象 失败了此对象为null
IE9以上的解析失败会报错执行catch语句把xml赋值为undefined
在 IE 以外的浏览器中,如果解析失败,方法 parseFromString() 不会抛出任何异常,只会返回一个包含了错误信息的文档对象,如下所示:
<parsererror xmlns="http:// www.mozilla.org/newlayout/xml/parsererror.xml">(error description)<sourcetext>(a snippet of the source XML)</sourcetext></parsererror>
基于此次下面就用了几个判断条件检验是否解析成功
if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { jQuery.error( "Invalid XML: " + data );}
1.xml转换为false 比如ie9解析失败是
2.xml.documentElement可以转换为false 针对IE低版本
3.parsererror元素存在 针对非IE
满足任意一条就会调用error方法告诉开发者XML无效,最后返回解析后的xml文档
新闻热点
疑难解答