之前我们已经学习过刘伟老师讲的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);
效果如下:
但是,动态添加节点的过程相对来说比较麻烦,如果是添加单一节点,此法还可以使用。但如果添加的节点数过多时,就显得麻烦了。个人感觉使用外部加载的方法比较适合。