跨浏览器处理xml 兼容IE

来源:互联网 发布:非农数据看过你 编辑:程序博客网 时间:2024/05/22 00:17
/** * 1.跨浏览器处理xml * 2.load方法只有IE,firefox,opera支持,所有无法跨浏览器 * 3.xmldom对象顺序问题,先进行先进的dom2,再去判断其他的IE * 4.不同浏览器不同的序列化操作 * 5.不同报错,进行不同的报错机制 *//** * 1.跨浏览器获取xmldom */function getXMLDOM(xmlStr) {    var xmlDom = null;    // 标准的w3c浏览器创建DOMParser对象    if (typeof window.DOMParser != 'undefined') {        // DOMParser对象中的方法parseFromString();接收两个参数来创建xmldom对象        xmlDom = (new DOMParser()).parseFromString(xmlStr, 'text/xml');        // 如果产生错误会是一个新的文档parsererror        //  HTMLCollection[parsererror]        // 错误文档是<parsererror>这里是内容</pasererror>        var errors = xmlDom.getElementsByTagName('parsererror');        console.log(errors);        if (errors.length > 0) {            throw new Error('XML解析错误:' +                errors[0].firstChild.nodeValue);        }    } else if (typeof window.ActiveXObject != 'undefinded') {        // IE8和以下        var version = [            // 版本顺序6.0推荐并且稳定,3.0最低推荐,最后一个特殊情况下用的            'MSXML2.DOMDocument6.0',            'MSXML2.DOMDocument3.0',            'MSXML2.DOMDocument'        ];        for (var i = 0, len = version.length; i < len; i++) {            try {                // 判断支持哪个版本                var xmlDom = new ActiveXObject(version[i]);            } catch (e) {}        }        // 加载xml字符串        xmlDom.loadXML(xmlStr);        // IE8和以下错误属性对象parseError        // 这个属性有多个对象        // errorCode发生错误类型代号        // filepos发生错误文件中的位置        // line错误行号        // linepos错误行号,那一行上的字符的位置        // resion错误的解释原因        // alert(xmlDom.parseError);        // 等于0的时候才是正确的xml字符串        if (xmlDom.parseError != 0) {            throw new Error('XML解析错误:' + xmlDom.parseError.reason);        }    } else {        throw new Error('您的系统或浏览器不支持xmldom!');    }    return xmlDom;}// alert(getXMLDOM('<root><user>邓志强getXMLDOM</user></root>').documentElement.tagName);// alert(window.DOMParser);//PS:为了跨越所有浏览器兼容,我们放弃了从外部加载XML文件,而使用了字符串XML加载和序列化。function serializerXML(xmlDom) {    var xml = '';    // w3c的XMLSerializer序列化方法    // new XMLSerializer()创建一个序列化对象    // 序列化xmldom对象    if (typeof window.XMLSerializer != 'undefined') {        xml = (new XMLSerializer()).serializeToString(xmlDom);    } else if (typeof xmlDom.xml != 'undefined') {        // IE的序列化方法        xml = xmlDom.xml;    }    return xml;}getXMLDOM('<root><user>邓志强getXMLDOM</user></root>');
0 0