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”。