解析XML中的樹(shù)形結(jié)構(gòu)與DOM文檔對(duì)象模型

樹(shù)結(jié)構(gòu)
XML 文檔始終是描述性的。樹(shù)狀結(jié)構(gòu)通常被稱為 XML 樹(shù),它在描述 XML 文檔的過(guò)程中扮演一個(gè)重要的角色。
這個(gè)樹(shù)結(jié)構(gòu)包含根(父)元素,子元素等等。通過(guò)使用樹(shù)狀結(jié)構(gòu),我們可以了解源自根元素的所有后續(xù)分支和子分支。解析從根元素開(kāi)始,然后向下移動(dòng)到指向某個(gè)元素的第一個(gè)分支,從這里開(kāi)始處理第一個(gè)分支及其子節(jié)點(diǎn)。
示例
下面的示例演示了簡(jiǎn)單的 XML 樹(shù)結(jié)構(gòu):
- <?xml version="1.0"?>
- <Company>
- <Employee>
- <FirstName>Tanmay</FirstName>
- <LastName>Patil</LastName>
- <ContactNo>1234567890</ContactNo>
- <Email>tanmaypatil@xyz.com</Email>
- <Address>
- <City>Bangalore</City>
- <State>Karnataka</State>
- <Zip>560212</Zip>
- </Address>
- </Employee>
- </Company>
下面的樹(shù)結(jié)構(gòu)表示上面的 XML 文檔:
圖中,有一個(gè)叫做 <company> 的根元素。里面又有一個(gè) <Employee> 元素。在雇員元素里面,又有 5 個(gè)分支,分別是 <FirstName>,<LastName>,<ContactNo>,<Email> 和 <Address>。在 <Address> 元素內(nèi),又有三個(gè)子分支,分別是 <City>,<State> 和 <Zip>。
DOM文檔對(duì)象模型
文檔對(duì)象模型(DOM)是 XML 的基礎(chǔ)。XML 文檔有一個(gè)信息層次結(jié)構(gòu)單位,被稱作節(jié)點(diǎn);DOM 是描述這些節(jié)點(diǎn)和它們之間關(guān)系的一種方式。
DOM 文檔就是一個(gè)節(jié)點(diǎn)集合或者按照層次結(jié)構(gòu)組織的信息塊。這個(gè)層次結(jié)構(gòu)允許開(kāi)發(fā)人員導(dǎo)航這個(gè)節(jié)點(diǎn)樹(shù)來(lái)查詢特定的信息。由于它基于信息層次結(jié)構(gòu),DOM 也被認(rèn)為是_基于節(jié)點(diǎn)樹(shù)_的。
另一方面,XML DOM 還提供了一個(gè) API,允許開(kāi)發(fā)者在節(jié)點(diǎn)樹(shù)的任意位置添加,編輯,移動(dòng)或者移除節(jié)點(diǎn),以便創(chuàng)建應(yīng)用程序。
示例
下面的示例(sample.htm)將一個(gè) XML 文檔("address.xml")解析為一個(gè) XML DOM 對(duì)象,然后用 JavaScript 提取了一些信息:
- <!DOCTYPE html>
- <html>
- <body>
- <h1>TutorialsPoint DOM example </h1>
- <div>
- <b>Name:</b> <span id="name"></span><br>
- <b>Company:</b> <span id="company"></span><br>
- <b>Phone:</b> <span id="phone"></span>
- </div>
- <script>
- if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
- xmlhttp = new XMLHttpRequest();
- } else {// code for IE6, IE5
- xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
- }
- xmlhttp.open("GET","/xml/address.xml",false);
- xmlhttp.send();
- xmlDoc=xmlhttp.responseXML;
- document.getElementById("name").innerHTML=
- xmlDoc.getElementsByTagName("name")[0].childNodes[0].nodeValue;
- document.getElementById("company").innerHTML=
- xmlDoc.getElementsByTagName("company")[0].childNodes[0].nodeValue;
- document.getElementById("phone").innerHTML=
- xmlDoc.getElementsByTagName("phone")[0].childNodes[0].nodeValue;
- </script>
- </body
- </html>
address.xml 的內(nèi)容如下:
- <?xml version="1.0"?>
- <contact-info>
- <name>Tanmay Patil</name>
- <company>TutorialsPoint</company>
- <phone>(011) 123-4567</phone>
- </contact-info>
我們可以把這兩個(gè)文 sample.htm 和 address.xml 件保存到同一目錄 /xml 中,然后通過(guò)在瀏覽器中打開(kāi)的方式執(zhí)行 sample.htm 文件。它應(yīng)該生成如下所示結(jié)果:
這里,可以看到我們提取了每個(gè)子節(jié)點(diǎn)并顯示了它們的值。
相關(guān)文章
- 這篇文章主要介紹了詳解XML編程中的模式定義XSD,講解了如何在XML文檔中聲明模式及定義類型等內(nèi)容,需要的朋友可以參考下2016-02-15
- 這篇文章主要介紹了XML中的DTD文檔類型定義,是XML入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-02-15
- 這篇文章主要介紹了XML代碼編寫的編碼與驗(yàn)證問(wèn)題,與HTML類似,XML文件的編碼也能在序言部分被指定,需要的朋友可以參考下2016-02-15
- 這篇文章主要介紹了XML中的處理指令,處理指令在XML中并不常用,稍作了解即可,需要的朋友可以參考下2016-02-15
- 這篇文章主要介紹了XML對(duì)代碼中的空白處理,文中介紹到了XML書寫中的有效空白與無(wú)效空白的區(qū)分,需要的朋友可以參考下2016-02-14
深入解析XML中的字符實(shí)體與字符數(shù)據(jù)
這篇文章主要介紹了XML中的字符實(shí)體與字符數(shù)據(jù),文中所說(shuō)的CDATA片段即是指字符數(shù)據(jù)即不由解析器解析的文本塊,需要的朋友可以參考下2016-02-14- 這篇文章主要介紹了詳解XML中的代碼注釋書寫方法,文章中總結(jié)了注釋使用的一些注意點(diǎn),比如XML不支持嵌套注釋等,需要的朋友可以參考下2016-02-14
- 這篇文章主要介紹了XML中的屬性學(xué)習(xí)教程,包括使用屬性將數(shù)據(jù)存儲(chǔ)在子元素中的例子,需要的朋友可以參考下2016-02-14
- 這篇文章主要介紹了XML中的標(biāo)簽與元素的使用,是XML入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-02-14
- 這篇文章主要介紹了XML中的文檔與聲明用法,是XML入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-02-04