淺談如何用Javascript操作XML
文中盡量用上所有的操作和屬性,以做示范。
大多數(shù)瀏覽器都有讀取和操作 XML 的內(nèi)建 XML 解析器。解析器(XML Parser)把 XML 轉(zhuǎn)換為 JavaScript 可訪問的對象。
解析器把XML 載入內(nèi)存,然后把它轉(zhuǎn)換為可通過JavaScript 訪問的 XML DOM 對象。微軟的XML解析器與其他瀏覽器中的解析器之間,存在一些差異。微軟的解析器支持 XML 文件和 XML 字符串(文本)的加載,而其他瀏覽器使用單獨(dú)的解析器。不過,所有的解析器都包含遍歷 XML 樹、訪問插入及刪除節(jié)點(diǎn)(元素)及其屬性的函數(shù)。
XML DOM 把XML文檔視為一種樹結(jié)構(gòu)。這種樹結(jié)構(gòu)被稱為節(jié)點(diǎn)樹。
可通過這棵樹訪問所有節(jié)點(diǎn)??梢孕薷幕騽h除它們的內(nèi)容,也可以創(chuàng)建新的元素。
這顆節(jié)點(diǎn)樹展示了節(jié)點(diǎn)的集合,以及它們之間的聯(lián)系。這棵樹從根節(jié)點(diǎn)開始,然后在樹的最低層級(jí)向文本節(jié)點(diǎn)長出枝條:
- script language="JavaScript">
- <!--
- var doc = new ActiveXObject("Msxml2.DOMDocument"); //ie5.5+,CreateObject("Microsoft.XMLDOM")
- //加載文檔
- //doc.load("b.xml");
- //創(chuàng)建文件頭
- var p = doc.createProcessingInstruction("xml","version='1.0' encoding='gb2312'");
- //添加文件頭
- doc.appendChild(p);
- //用于直接加載時(shí)獲得根接點(diǎn)
- //var root = doc.documentElement;
- //兩種方式創(chuàng)建根接點(diǎn)
- // var root = doc.createElement("students");
- var root = doc.createNode(1,"students","");
- //創(chuàng)建子接點(diǎn)
- var n = doc.createNode(1,"ttyp","");
- //指定子接點(diǎn)文本
- //n.text = " this is a test";
- //創(chuàng)建孫接點(diǎn)
- var o = doc.createElement("sex");
- o.text = "男"; //指定其文本
- //創(chuàng)建屬性
- var r = doc.createAttribute("id");
- r.value="test"; //添加屬性
- n.setAttributeNode(r);
- //創(chuàng)建第二個(gè)屬性
- var r1 = doc.createAttribute("class");
- r1.value="tt";
- //添加屬性
- n.setAttributeNode(r1);
- //刪除第二個(gè)屬性
- n.removeAttribute("class");
- //添加孫接點(diǎn)
- n.appendChild(o);
- //添加文本接點(diǎn)
- n.appendChild(doc.createTextNode("this is a text node."));
- //添加注釋
- n.appendChild(doc.createComment("this is a comment\n"));
- //添加子接點(diǎn)
- root.appendChild(n);
- //復(fù)制接點(diǎn)
- var m = n.cloneNode(true);
- root.appendChild(m);
- //刪除接點(diǎn)
- root.removeChild(root.childNodes(0));
- //創(chuàng)建數(shù)據(jù)段
- var c = doc.createCDATASection("this is a cdata");
- c.text = "hi,cdata";
- //添加數(shù)據(jù)段
- root.appendChild(c);
- //添加根接點(diǎn)
- doc.appendChild(root);
- //查找接點(diǎn)
- var a = doc.getElementsByTagName("ttyp");
- //var a = doc.selectNodes("http://ttyp");
- //顯示改接點(diǎn)的屬性
- 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);
- }
- }
- //修改節(jié)點(diǎn),利用XPATH定位節(jié)點(diǎn)
- var b = doc.selectSingleNode("http://ttyp/sex");
- b.text = "女";
- //alert(doc.xml);
- //XML保存(需要在服務(wù)端,客戶端用FSO)
- //doc.save();
- //查看根接點(diǎn)XML
- if(n)
- {
- alert(n.ownerDocument.xml);
- }
- //-->
- </script>
【編輯推薦】