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

时间: 2024-08-10 15:14:45

jQuery静态方法parseXML使用和源码分析的相关文章

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

Eval函数大家都很熟悉,但是globalEval方法却很少使用,大多数参考手册也没有相关api,下面就对其用法和源码相应介绍: jQuery.globalEval()函数用于全局性地执行一段JavaScript代码. 示例: var name = "全局变量"; function test(){ var name = "局部变量"; alert(name); // 局部变量 eval( "alert(name);" ); // 局部变量 $.g

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

jQuery.type方法是检测数据类型的工具方法,在分析其用法之前先总结下js给我们提供了那些监测数据类型的方法: 一.typeof 操作符 下面是测试代码 var data=[],a='123',b=0,c=true,d={1:23},e=[123],f=function(){},g=null,h=undefined,i=Math,j=/$.+^/,k= new Date(); data.push(a,b,c,d,e,f,g,h,i,j,k); for(var key=0;key<data.

jQuery静态方法isPlainObject,isEmptyObject方法使用和源码分析

isPlainObject方法 测试对象是否是纯粹的对象(通过 "{}" 或者 "new Object" 创建的) 示例: //测试是否为纯粹的对象 jQuery 代码: jQuery.isPlainObject({}) // true jQuery.isPlainObject("test") // false 源码分析: isPlainObject: function( obj ) { // Must be an Object. // Beca

转载Aaron ---- jQuery 2.0.3 源码分析core - 选择器

jQuery 2.0.3 源码分析core - 选择器(02) 声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢! 打开jQuery源码,一眼看去到处都充斥着正则表达式,jQuery框架的基础就是查询了,查询文档元素对象,所以狭隘的说呢,jQuery就是一个选择器,并这个基础上构建和运行查询过滤器! 工欲善其事,必先利其器,所以先从正则入手 我们来分解一个表达式 // A simple way to check for HTML strings // Prioritize

jQuery.lazyload使用及源码分析

前言: 貌似以前自己也写过图片懒加载插件,但是新公司使用的是jQuery.lazyload插件,为了更好的运用,自己还是把源码看了遍,分别记录了如何使用, 插件原理,各个配置属性的完整解释,demo实例,源码分析(较简短),源码分析可以配合使用,配置属性,原理进行阅读,如需转载,请注明出处 博客园 华子yjh 一.如何使用 // 最简单的使用,不带参数 $('img').lazyload(); // 带参数(配置对象),下面配置对象中的各个属性值都是默认的 $('img').lazyload({

Android Debuggerd 简要介绍和源码分析(转载)

转载: http://dylangao.com/2014/05/16/android-debuggerd-%E7%AE%80%E8%A6%81%E4%BB%8B%E7%BB%8D%E5%92%8C%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/ 码字很辛苦,转载请注明来自Dylan‘s Zone的<Android Debuggerd 简要介绍和源码分析> 本文以android4.1为基础,分析debuggerd这个工具的使用方法和源码. 1.Debuggerd 简介

java集合框架10——TreeMap和源码分析(一)

前面讨论完了HashMap和HashTable的源码,这一节我们来讨论一下TreeMap.先从整体上把握TreeMap,然后分析其源码,深入剖析TreeMap的实现. 1. TreeMap简介 TreeMap是一个有序的key-value集合,它内部是通过红-黑树实现的,如果对红-黑树不太了解,请先参考下这篇博文:红-黑树.下面我们先来看看TreeMap的继承关系: java.lang.Object ? java.util.AbstractMap<K, V> ? java.util.TreeM

转载Aaron博客 ---- jQuery 2.0.3 源码分析core - 整体架构

jQuery 2.0.3 源码分析core - 整体架构 整体架构 拜读一个开源框架,最想学到的就是设计的思想和实现的技巧. 废话不多说,jquery这么多年了分析都写烂了,老早以前就拜读过, 不过这几年都是做移动端,一直御用zepto, 最近抽出点时间把jquery又给扫一遍 我也不会照本宣科的翻译源码,结合自己的实际经验一起拜读吧! github上最新是jquery-master,加入了AMD规范了,我就以官方最新2.0.3为准 整体架构 jQuery框架的核心就是从HTML文档中匹配元素并

转:《Linux设备驱动程序3》源码目录结构和源码分析经典链接

转自:http://blog.csdn.net/geng823/article/details/37567557 [原创][专栏]<Linux设备驱动程序>--- LDD3源码目录结构和源码分析经典链接 [专栏]Linux设备驱动程序学习(总目录) [专栏]LDD3源码分析链接(总目录) 1. LDD3源码分析之hello.c与Makefile模板 2. LDD3源码分析之字符设备驱动程序 其他错误: 我的Linux内核为 3.2.0-65-generic-pae,在scull目录下make时