JavaScript中装载XML文档

IE和FierFox浏览器对于这装载同域的XML文件和装载XML字符串这两种情况,分别有各自的处理方式。IE的解析器支持XML文件和XML字符串的加载,而火狐浏览器使用单独的解析器把XML载入内存,然后转换为可通过JS访问的XML DOM对象。

以下是js代码:

/* 
 * 封装IE和Firefox类浏览器中装载同域XML或XML字符串的方法,
 * @param flag true表示装载XML的文件,false表示装载XML的字符串
 * @param xmldoc flag为true表示XML文件的路径,flag为false表示XML字符串
 */

function loadXML(flag,xmldoc){
    if(window.activeXObject) {
        //IE浏览器
        //创建空的XML对象
       var activexName = ["MSXML2.DOMDdcument","Miscrosoft.XmlDom"];
        var xmlObj;
        for(var i = 0; i < actviexName.length;i++){
            try{
                xmlObj = new ActiveXObject(activeName[i]);
                break;
            }catch(e){
                
            }
        }
        if(xmlObj){
            //同步方式装载XML数据,确保在文档完全加载之前解析器不会继续脚本的执行
            xmlObj.async = false;
            if(flag){
                //load用于加载文件,loadXML用于加载字符串
               //装载XML文件
                xmlObj.load(xmldoc);
            }else{
                //装载XML的字符串
                xmlObj.loadXML(xmldoc);
            }
            //返回根节点
            return xmlObj;
            //返回根元素节点
            return xmlObj.documentElement;
        }else{
            alert("装载XML文档的对象创建失败");
            return null;
        }
    }else if(document.implementation.creatDocument){
        //针对Firefox类浏览器
        var xmlObj;
        if(flag){
            //装载XML文件
            //先创建一个空的xml dom对象
            xmlObj = document.implementation.creatDocument("","",null);
            if(xmlObj){
                //同步方式进行装载
                xmlObj.async = false;
                xmlObj.load(xmldoc);
                return xmlObj.documentElement;
            }else{
                alert("装载XML文档的对象创建失败");
                return null;
            }
        }else{
            //装载XML的字符串
            //创建一个dom解析器
            xmlObj = new DOMParser();
            //把xml字符串解析成要返回的dom对象
            var docRoot = xmlObj.parerFromString(xmldoc,"test/xml");
            return docRoot.documentElement;
        }
    }
    alert("装载XML文档的对象创建失败");
    return null;
}

html代码

<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script type="text/javascript" src="load.js"></script>
        <script type="text/javascript">
            function test(){
                //装载同域的XML文件
                var domxml1 = loadXML(true,"test.xml");
                //装载XML字符串
                var domxml2 = loadXML(true,"<xml>123</xml>");
                alert("");
            }
        </script>
    </head>
    <body>
        <input type="button" value="test" οnclick="test()"/>
    </body>
</html>

XML页内容
<?xml version="1.0" encoding="UTF-8"?>
<root>
    木子松就是我,我就是木子松
</root>

总结

     对于装载同域的XML文件,IE浏览器和火狐类浏览器都是先创建一个空的XML文档对象,然后用“xmlDoc.load(“**.xml”)”告知解析器加载名为**.xml的XML文档

        对于装载XML字符串,IE浏览器和装载XML文件的方式一样,利用微软内建的解析器加载XML字符串;而火狐类浏览器,则是通过"var parser = new DOMParser()"创建dom解析器,然后利用方法parserFromString()加载 XML字符串。另外DOMParser对象的load()方法可用于加载文件。

       跨域访问处于安全方面的原因,现在的浏览器不允许跨域访问。如果想跨域访问,则必须把XML文件放到自己的服务器上,否则,xmlDoc.load()将产生错误“Access is denied”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木子松的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值