首页 > 网站 > WEB开发 > 正文

jQuery静态方法parseXML使用和源码分析

2024-04-27 14:06:33
字体:
来源:转载
供稿:网友

jQuery静态方法parsexml使用和源码分析

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文档


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表