用Javascript 对XML进行操作

大多数浏览器都有读取和操作 XML 的内建 XML 解析器。解析器(XML Parser)把 XML 转换为 JavaScript 可访问的对象。

 

XML DOM 把XML文档视为一种树结构。这种树结构被称为节点树。

可通过这棵树访问所有节点。可以修改或删除它们的内容,也可以创建新的元素。

这颗节点树展示了节点的集合,以及它们之间的联系。这棵树从根节点开始,然后在树的最低层级向文本节点长出枝条:

 

 

script language="JavaScript"> <!-- var doc = new ActiveXObject("Msxml2.DOMDocument"); //ie5.5+,CreateObject("Microsoft.XMLDOM") //加载文档 //doc.load("b.xml"); //创建文件头 var p = doc.createProcessingInstruction("xml","version='1.0' encoding='gb2312'"); //添加文件头 doc.appendChild(p); //用于直接加载时获得根接点 //var root = doc.documentElement; //两种方式创建根接点 // var root = doc.createElement("students"); var root = doc.createNode(1,"students",""); //创建子接点 var n = doc.createNode(1,"ttyp",""); //指定子接点文本 //n.text = " this is a test"; //创建孙接点 var o = doc.createElement("sex"); o.text = "男"; //指定其文本 //创建属性 var r = doc.createAttribute("id"); r.value="test"; //添加属性 n.setAttributeNode(r); //创建第二个属性 var r1 = doc.createAttribute("class"); r1.value="tt"; //添加属性 n.setAttributeNode(r1); //删除第二个属性 n.removeAttribute("class"); //添加孙接点 n.appendChild(o); //添加文本接点 n.appendChild(doc.createTextNode("this is a text node.")); //添加注释 n.appendChild(doc.createComment("this is a comment/n")); //添加子接点 root.appendChild(n); //复制接点 var m = n.cloneNode(true); root.appendChild(m); //删除接点 root.removeChild(root.childNodes(0)); //创建数据段 var c = doc.createCDATASection("this is a cdata"); c.text = "hi,cdata"; //添加数据段 root.appendChild(c); //添加根接点 doc.appendChild(root); //查找接点 var a = doc.getElementsByTagName("ttyp"); //var a = doc.selectNodes("//ttyp"); //显示改接点的属性 for(var i= 0;i<a.length;i++) { alert(a[i].xml); for(var j=0;j<a[i].attributes.length;j++) { alert(a[i].attributes[j].name); } } //修改节点,利用XPATH定位节点 var b = doc.selectSingleNode("//ttyp/sex"); b.text = "女"; //alert(doc.xml); //XML保存(需要在服务端,客户端用FSO) //doc.save(); //查看根接点XML if(n) { alert(n.ownerDocument.xml); } //--> </script>    

 

 

/*1. 第一步肯定是要创建一个操作xml文件的对象

     可是IE和FF创建的方法不一样,所以要写个兼容IE和FF的 
  2. 加载XML文件
  3. 获取或设置XML中的数据有如下方法
      利用selectNodes或childNodes或 
     a. 对象.documentElement.childNodes.item(0) 根元素的直接子级第一个元素对象,依次累推......
        获取是用text或getAttribute("属性名"),设置是用setAttribute("属性名",值)或text
     b. 对象.documentElement.selectNodes("//根元素/直接子级1")或selectSingleNode 
     c. 对象.getElementsByTagName()
 */

 

 

创建一个操作xml文件的对象的方法

  function createXMLObj(xmlPath){
       if(window.ActiveXObject){ //在IE下
          xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
          xmlDoc.async="false";   
          xmlDoc.load(xmlPath); 
      }else if(document.implementation && document.implementation.createDocument){ //在FF下
          xmlDoc=document.implementation.createDocument("", "", null); 
          xmlDoc.load(xmlPath); 
      }else{
         return null;
      }
      return xmlDoc;
}

 

获取数据的三种方法
//方法一
//document.writeln( xdoc.documentElement.childNodes.item(2).childNodes.item(0).getAttribute("title") );
//方法二
//document.writeln( xdoc.documentElement.selectNodes("//eyejs/options/options1").item(0).childNodes.item(0).text );
//document.writeln( xdoc.documentElement.selectNodes("//eyejs/options/options1").item(0).getAttribute("title") );
//document.writeln( xdoc.documentElement.selectNodes("//eyejs/options/options1").item(0).attributes(0).value );
//方法三
//document.writeln( xdoc.getElementsByTagName("options")[0].getAttribute("catename") );
//document.writeln( xdoc.getElementsByTagName("options")[0].attributes[0] );
在获取数据时,在FF下一定要用
xdoc.onload=function(){  }来获取

 

 

举例js代码
function createXMLObj(xmlPath){
       if(window.ActiveXObject){ //在IE下
          xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
          xmlDoc.async="false";   
          xmlDoc.load(xmlPath); 
          getValue(xmlDoc);
      }else if(document.implementation && document.implementation.createDocument){ //在FF下
          xmlDoc=document.implementation.createDocument("", "", null); 
          xmlDoc.load(xmlPath); 
          xmlDoc.onload=function(){ getValue(xmlDoc); }
      }else{
         return null;
      }
      return xmlDoc;
   }
    function getValue(xmlDoc){
       var arrTags=xmlDoc.getElementsByTagName("options1");
       document.writeln( arrTags[0].getAttribute("title") );
   }

 

你可能感兴趣的:(JavaScript,xml,function,IE,null,encoding)