zoukankan      html  css  js  c++  java
  • 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文档

  • 相关阅读:
    BZOJ 3529 [Sdoi2014]数表
    bzoj 3195 [Jxoi2012]奇怪的道路
    BZOJ 4720 [Noip2016]换教室
    BZOJ 2160 拉拉队排练
    BZOJ 1031 [JSOI2007]字符加密Cipher 后缀数组教程
    BZOJ 1002 [FJOI2007]轮状病毒
    欧拉定理、拓展欧拉定理及其应用(欧拉降幂法)
    算术基本定理解析及其应用
    The 15th Zhejiang Provincial Collegiate Programming Contest(部分题解)
    网络流解析及其应用
  • 原文地址:https://www.cnblogs.com/yy-hh/p/4673450.html
Copyright © 2011-2022 走看看