首先,为什么要区分两个浏览器,其实不能说是两个,而是两种,一种是IE类的,一种是Firefox类的,这里,我借用我的同学小鹏的回答:在每个浏览器里面实现这个功能的方式不一样,所以要区分,而区分的方式就是用每一个浏览器的特征来区分,像if(window.activeXObject)就是用来判断是不是IE 。
接下来,知道浏览器的区别后,要搞清楚,一下几个问题:
1.访问或者是操作XML文档,首先要创建DomDocument对象。
2.然后将XML文档或者是字符串装载到这个对象。
3.最后,用这个对象所带有的方法来实现相应的操作。
4.再提一下区分浏览器的问题
相信只要装载好了,那些函数的调用就相对简单些了,所以,对于初学的来说,理解和装载是很难得一步。坚持!
下面,我将把以上三个步骤放过来,以加深印象。所有的注释我已经写的很清楚了。
第一个,loadxmlwenjian.js
// JavaScript Document
/*
封装ie和firefox类浏览器中装载同域xml文件或xml字符串的方法,返回的是xml文档对应的DOM对象中的根元素节点
*/
function loadxml(xmldoc){
if (window.ActiveXObject){
//IE浏览器
var activeNames=['MSXML2.DOMDocumnet.5.0', 'MSXML2.DOMDocumnet.4.0',
'MSXML2.DOMDocumnet.3.0','Microsoft.XmlDom'];
//在ie下可以创建装载xml文档的空间名称
var xmlobject;//创建出来的能够装载xml的对象
for (var i=0;i<activeNames.length;i++){
try {
xmlobject=new ActiveXObject(activeNames[i]);
break;
}
catch (e){}
}
if(xmlobject){
//如果创建成功,则利用这个对象进行xml文件或xml文档的装载
//装载文件和字符串,ie又有不同的方法进行对应,下面进行判断
xmlobject.async=false;//一般使用同步方式
//装载xml的文件
xmlobject.load(xmldoc);
return xmlobject.xml;
//return xmlobject.documentElement;//返回根元素节点
}
else{
alert("装载文件的对象创建失败");
return null;
}
}
else if (document.implementation.createDocument){
//针对firefox类浏览器,也是两种不同的方式装载
var xmlobject;
//装载xml文件,需要先创建一个空的DOM对象,然后装载xml内容
xmlobject=document.implementation.createDocument("","",null);//创建空的Dom对象
if (xmlobject){
xmlobject.async=false;//同步方式装载
xmlobject.load(xmldoc);
var ser=new XMLSerializer(); //序列化方式也与ie浏览器不同
var xml=ser.serializeToString(xmlobject);
return xml;
}
else{
alert ("装载xml文档的对象创建失败");
return null;
}
}
}
第二个,loadxml.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>
<script type="text/javascript" src="loadxmlwenjian.js"></script>
<script type="text/javascript">
function test(){
var domxml1=loadxml("test.xml");
alert(domxml1);
}
</script>
<body>
<input type="button" value="test" onClick="test()"/>
</body>
</html>
第三个,test.xml文档:
<?xml version="1.0" encoding="gb2312"?>
<root><nihao>nihao456</nihao>
<dajiahao>tiana</dajiahao>
</root>
还是要提一下小鹏给的意见:应该保证每个函数一个出口一个入口,所以,应该将整个js文件分为几部分,否则,里面的很多return会把人搞晕的。嘻嘻~继续加油!
最后是一个问题:就是最上面的那个数组内容,那些内容和以前创建XMLHttpRequest对象时候的数组内容不一样,还有哪些其他的呀?到底是什么意思?