木灵鱼儿

木灵鱼儿

阅读:750

最后更新:2018/10/24/ 3:04:58

DOM2级兼容旧版IE创建兼容的loadXML()和.xml方法

前言:

由于DOM2不支持load()从外部加载xml文件,所以只能做loadXML()的兼容方法,有点可惜!

创建兼容的loadXML():

function createXMLDom(value){
    var xmlDom = null;
    if(typeof window.DOMParser != 'undefined') {
        xmlDom = (new DOMParser()).parseFromString(value,'text/xml');
        //alert((new XMLSerializer()).serializeToString(xmlDom)); //用来查看错误的xml里的信息
        var error = xmlDom.getElementsByTagName('parsererror');   //只有错误的xml里面才有parsererror标签;
        if(error.length > 0){
            throw new Error('错误信息:'+ error[0].textContent);
        }
    }else if(typeof window.ActiveXObject != 'undefined'){
        var xmlvie = ['MSXML2.DOMDocument.6.0','MSXML2.DOMDocument.3.0','MSXML2.DOMDocument'];
        for(var i = 0;i < xmlvie.length;i++){
            try {
                xmlDom = new ActiveXObject(xmlvie[i]);
            } catch(e) {
                //跳过
            }
            xmlDom.loadXML(value);            
        }
        if(xmlDom.parseError != 0) {
            throw new Error('错误行号:'+ xmlDom.parseError.line +
                            '\n错误代号:' + xmlDom.parseError.errorCode +
                            '\n错误解释:' + xmlDom.parseError.reason);
        }
    }else {
        throw new Error('当前浏览器或者系统不支持XML DOM');
    }
    
    return xmlDom;
}

创建兼容的.xml方法:

function serialize(xmlDom){
    var xml = '';
    if(typeof window.XMLSerializer != 'undefined') {
        xml = (new XMLSerializer()).serializeToString(xmlDom);
    }else if(typeof xmlDom.xml != 'undefined') {
        xml = xmlDom.xml;
    }
    return xml;
}

运行:

var xmlstr = '<root><user>lee</user></root>';
var xmlDom = createXMLDom(xmlstr);
var xml = serialize(xmlDom);
alert(xml);

版权申明

本文系作者 @木灵鱼儿 原创发布在木灵鱼儿 - 有梦就能远航站点。未经许可,禁止转载。

关于作者

站点职位 博主
获得点赞 0
文章被阅读 750

相关文章