DOM(二)——XML DOM

XMLExtensible Markup Language)可擴展標記語言(可以通過這篇博客簡單瞭解XML基礎介紹),DOMDocument ObjectModel)文檔對象模型(通過上篇博客瞭解DOM(一)——HTML DOM)。非常明顯,XML DOM就是文檔類型模型針對XML做的一些操作。是和HTMLDOM共同合作來完成網頁數據的動態改變顯示等問題!和XML DOM有很多相似的地方,但是基於XMLHTML的區別,他們的一些操作還是有很大不同的。來看一下JavaScript通過DOMXML的操作相關知識。


        DOMXML中關於節點,屬性,方法等的概念,知識都是非常相似的,這裏不再贅述,這裏重點通過幾個實例運用一下!


      我們先引進一個XML文件books.xml,以後操作都在它上進行:(注意觀察XMLHTML的不同處和相同處)


[html] view plain copy print?

  1. <span style="font-size:18px;"><?xml version="1.0" encoding="ISO-8859-1"?>  

  2. <bookstore>  

  3. <book category="children">  

  4.   <title lang="en">Harry Potter</title>   

  5.   <author>J K. Rowling</author>   

  6.   <year>2005</year>   

  7.   <price>29.99</price>   

  8. </book>  

  9. <book category="cooking">  

  10.   <title lang="en">Everyday Italian</title>   

  11.   <author>Giada De Laurentiis</author>   

  12.   <year>2005</year>   

  13.   <price>30.00</price>   

  14. </book>  

  15. <book category="web">  

  16.   <title lang="en">Learning XML</title>   

  17.   <author>Erik T. Ray</author>   

  18.   <year>2003</year>   

  19.   <price>39.95</price>   

  20. </book>  

  21. <book category="web">  

  22.   <title lang="en">XQuery Kick Start</title>   

  23.   <author>James McGovern</author>   

  24.   <author>Per Bothner</author>   

  25.   <author>Kurt Cagle</author>   

  26.   <author>James Linn</author>   

  27.   <author>Vaidyanathan Nagarajan</author>   

  28.   <year>2003</year>   

  29.   <price>49.99</price>   

  30. </book>  

  31. </bookstore>  

  32. </span>  



    一,解析XML文件,大多數瀏覽器都內建了讀取和操作XML的解析器,通過解析器把XML轉換爲JavaScript可存取的對象。但是這裏的以IE爲內核的和FireFox或其他的瀏覽器是不同的,這裏看個全面的加載解析XML文件的例子:(以上邊books.xml進行實驗)


[javascript] view plain copy print?

  1. <span style="font-size:18px;"><html>  

  2.     <body>  

  3.         <script type="text/javascript">  

  4.             try //Internet Explorer  

  5.               {  

  6.                       xmlDoc=new ActiveXObject("Microsoft.XMLDOM");//創建IE瀏覽器的XML文檔對象  

  7.               }  

  8.             catch(e)  

  9.               {  

  10.                   try //Firefox, Mozilla, Opera, etc.  

  11.                     {  

  12.                           xmlDoc=document.implementation.createDocument("","",null);//創建空的XML文檔對象   

  13.                     }  

  14.                   catch(e) {alert(e.message)}  

  15.                }  

  16.             try   

  17.               {  

  18.                   xmlDoc.async=false;//關閉異步加載,這樣可確保在文檔完整加載之前,解析器不會繼續執行腳本   

  19.                   xmlDoc.load("/books.xml");//加載books.xml文件。注意:loadXML() 方法用於加載字符串(文本),而 load() 用於加載文件   

  20.                   document.write("xmlDoc is loaded, ready for use");//表明創建成功  

  21.               }  

  22.             catch(e) {alert(e.message)}//創建失敗,給出信息提示  

  23.         </script>  

  24.     </body>  

  25. </html>  

  26. </span>  


    二,主要是對節點的各種操作了,主要就是一些屬性和方法的使用,這裏先看一下典型最常用的屬性和方法:

 

XML DOM典型屬性

XML DOM常見方法

一些典型的 DOM屬性:

  • x.nodeName - x的名稱

  • x.nodeValue - x的值

  • x.parentNode - x的父節點

  • x.childNodes - x的子節點

  • x.attributes - x的屬性節點

    • x.getElementsByTagName(name) -獲取帶有指定標籤名稱的所有元素

    • x.appendChild(node) - x插入子節點

    • x.removeChild(node) - x刪除子節點

 

   更多的詳細請看,非常詳細:xmldom屬性與方法詳解


        1,首先看一下節點的訪問:可以通過三種方法(和HTML區別很大):

  1. 通過使用 getElementsByTagName()方法

  2. 通過循環(遍歷)節點樹

  3. 通過利用節點的關係在節點樹中導航

         由於XML的內容量要比HTML文件的量小的多,可以通過b,c兩種方法,HTML也可以,但是效率是非常差的(一般不用)。下邊看一個循環節點樹的實例:


[javascript] view plain copy print?

  1. <span style="font-size:18px;"><html>  

  2.     <head>  

  3.                  <script type="text/javascript" src="/example/xdom/loadxmldoc.js"></script>  

  4.     </head>  

  5.     <body>  

  6.       

  7.         <script type="text/javascript">  

  8.             xmlDoc=loadXMLDoc("/example/xdom/books.xml");  

  9.               

  10.             x=xmlDoc.documentElement.childNodes;//獲得第一個book元素的子節點  

  11.             for (i=0;i<x.length;i++)//循環  

  12.             {   

  13.             if (x[i].nodeType==1)//檢查其節點類型是否爲元素節點(節點類型和HTML DOM中一樣)  

  14.               {//Process only element nodes (type 1)   

  15.               document.write(x[i].nodeName);//輸出元素節點  

  16.               document.write("<br />");  

  17.               }   

  18.             }  

  19.         </script>  

  20.     </body>  

  21. </html>  

  22. </span>  



         2,改變節點的的屬性值可以通過nodeValue,setAttribute(),HTML基本一樣,比較簡單。對於節點的刪除,替換,創建,添加等,都是相似了,只要我們使用對應的方法或者屬性即可完成,這裏僅僅看了一個改變節點屬性的例子:


[javascript] view plain copy print?

  1. <span style="font-size:18px;"><html>  

  2.     <head>  

  3.         <script type="text/javascript" src="/example/xdom/loadxmldoc.js">   

  4.         </script>  

  5.     </head>  

  6.     <body>  

  7.       

  8.         <script type="text/javascript">  

  9.             xmlDoc=loadXMLDoc("/example/xdom/books.xml");  

  10.               

  11.             x=xmlDoc.getElementsByTagName("book")[0]  

  12.             y=x.getAttributeNode("category");  

  13.             y.nodeValue="child";  

  14.               

  15.             document.write(y.nodeValue);  

  16.         </script>  

  17.         </body>  

  18. </html>  

  19. </span>  



         3,這裏我單獨出來談一下節點的克隆,也就是複製節點,也就是將原有的節點進行復制,看下邊這個例子:


[javascript] view plain copy print?

  1. <span style="font-size:18px;"><html>  

  2.     <head>  

  3.         <script type="text/javascript" src="/example/xdom/loadxmldoc.js">   

  4.         </script>  

  5.     </head>  

  6.     <body>  

  7.       

  8.         <script type="text/javascript">  

  9.             xmlDoc=loadXMLDoc("/example/xdom/books.xml");  

  10.             x=xmlDoc.getElementsByTagName('book')[0];//得到爲book的第一個節點  

  11.             cloneNode=x.cloneNode(true);//克隆此節點  

  12.             xmlDoc.documentElement.appendChild(cloneNode);//將克隆好的節點添加到xml文件中  

  13.               

  14.             //Output all titles  

  15.             y=xmlDoc.getElementsByTagName("title");  

  16.             for (i=0;i<y.length;i++)  

  17.             {  

  18.                 document.write(y[i].childNodes[0].nodeValue);//循環顯示title的節點  

  19.                 document.write("<br />");  

  20.             }  

  21.         </script>  

  22.     </body>  

  23. </html>  

  24. </span>  




    三,在視頻中看到這樣一個功能,感覺是對XML操作前非常必要的,也就是對於XML中的空行和換行的處理

         Firefox,以及其他一些瀏覽器,會把空的空白或換行作爲文本節點來處理,而Internet Explorer 不會這樣。這就需要我們在操作XML時,先將其空文本去掉:


         綜上爲XML DOM的簡單理論學習,這裏需要我們結合實例,來學習,多瞭解各種方法屬性,結合HTML DOM一起學習。比較其中的同與異。當然這些都需要在用中不斷髮現,不斷積累。


            DOM是學習AJAX的非常重要的一部分,起到了異步更新網頁的的主要操作功能。當然AJAX中的核心還得學習XMLHttpRequest對象,下篇將來學習XMLHttpRequest的具體使用法。這段時間AJAX的學習,對B/S的很多塊內容都起到了補充的作用。本來嗎,AJAX就是多種知識結合的一個新知識。繼續深入學習中……

轉載至:http://blog.csdn.net/liujiahan629629/article/details/17122059

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章