之前我们已经学习过刘伟老师讲的XML视频,对XML有了一定的了解。现在JavaScript视频中再次对它进行了讲解,只不过所针对的内容不同。先前讲解的是XML的基本概念,对它的元素、节点、应用等问题进行详细说明。而此次的主要内容是实现XML的动态操作。
使用JavaScript加载XML主要有两种方式:内部加载和外部加载。(注:下述实现过程,仅在IE中可以实现)
内部加载:
function createXMLDOM(){
var version=['MSXML2.DOMDocument6.0',
'MSXML2.DOMDocument3.0',
'MSXML2.DOMDocument'];
for (var i=0;i<version.length;i++){
try{
//对于无法进行判断的条件,可以使用try-catch语句
var xmlDom=new ActiveXObject(version[i]);
return xmlDom;
}catch(e){
//跳过错误
}
}
throw new Error('您的系统或者浏览器不支持MSXML库');
}
var xmlDom=createXMLDOM();
xmlDom.loadXML('<root>\n<user>wang</user>\n</root>');//加载XML字符串
alert(xmlDom.xml);//序列化XML,打印字符串
var user=xmlDom.getElementsByTagName('user')[0];
alert(user.nodeType);//1
alert(user.tagName);//user
alert(user.firstChild.nodeValue);//wang
其效果如下:
外部加载:
function createXMLDOM(){
var version=['MSXML2.DOMDocument6.0',
'MSXML2.DOMDocument3.0',
'MSXML2.DOMDocument'];
for (var i=0;i<version.length;i++){
try{
//对于无法进行判断的条件,可以使用try-catch语句
var xmlDom=new ActiveXObject(version[i]);
return xmlDom;
}catch(e){
//跳过错误
}
}
throw new Error('您的系统或者浏览器不支持MSXML库');
}
var xmlDom=createXMLDOM();
xmlDom.load('demo.xml');//加载外部XML文件
alert(xmlDom.xml);//序列化XML,打印字符串
var user=xmlDom.getElementsByTagName('user')[0];
alert(user.nodeType);//1 表示节点类型:1是元素节点
alert(user.tagName);//user
alert(user.firstChild.nodeValue);//wang
<root>
<user>wang</user>
<email>wangpengbo92@163.com</email>
<url>http://baidu.com</url>
</root>
其效果如下:
动态添加节点:
function createXMLDOM(){
var version=['MSXML2.DOMDocument6.0',
'MSXML2.DOMDocument3.0',
'MSXML2.DOMDocument'];
for (var i=0;i<version.length;i++){
try{
//对于无法进行判断的条件,可以使用try-catch语句
var xmlDom=new ActiveXObject(version[i]);
return xmlDom;
}catch(e){
//跳过错误
}
}
throw new Error('您的系统或者浏览器不支持MSXML库');
}
var xmlDom=createXMLDOM();
xmlDom.load('demo.xml');//加载外部XML文件
//添加节点
var bbb=xmlDom.createElement('bbb');
var root=xmlDom.documentElement;
root.appendChild(bbb);
var bbbText=xmlDom.createTextNode('kkk');
bbb.appendChild(bbbText);
alert(xmlDom.xml);
效果如下:
但是,动态添加节点的过程相对来说比较麻烦,如果是添加单一节点,此法还可以使用。但如果添加的节点数过多时,就显得麻烦了。个人感觉使用外部加载的方法比较适合。