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

樹結(jié)構(gòu)
XML 文檔始終是描述性的。樹狀結(jié)構(gòu)通常被稱為 XML 樹,它在描述 XML 文檔的過程中扮演一個重要的角色。
這個樹結(jié)構(gòu)包含根(父)元素,子元素等等。通過使用樹狀結(jié)構(gòu),我們可以了解源自根元素的所有后續(xù)分支和子分支。解析從根元素開始,然后向下移動到指向某個元素的第一個分支,從這里開始處理第一個分支及其子節(jié)點。
示例
下面的示例演示了簡單的 XML 樹結(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>
下面的樹結(jié)構(gòu)表示上面的 XML 文檔:
圖中,有一個叫做 <company> 的根元素。里面又有一個 <Employee> 元素。在雇員元素里面,又有 5 個分支,分別是 <FirstName>,<LastName>,<ContactNo>,<Email> 和 <Address>。在 <Address> 元素內(nèi),又有三個子分支,分別是 <City>,<State> 和 <Zip>。
DOM文檔對象模型
文檔對象模型(DOM)是 XML 的基礎(chǔ)。XML 文檔有一個信息層次結(jié)構(gòu)單位,被稱作節(jié)點;DOM 是描述這些節(jié)點和它們之間關(guān)系的一種方式。
DOM 文檔就是一個節(jié)點集合或者按照層次結(jié)構(gòu)組織的信息塊。這個層次結(jié)構(gòu)允許開發(fā)人員導(dǎo)航這個節(jié)點樹來查詢特定的信息。由于它基于信息層次結(jié)構(gòu),DOM 也被認為是_基于節(jié)點樹_的。
另一方面,XML DOM 還提供了一個 API,允許開發(fā)者在節(jié)點樹的任意位置添加,編輯,移動或者移除節(jié)點,以便創(chuàng)建應(yīng)用程序。
示例
下面的示例(sample.htm)將一個 XML 文檔("address.xml")解析為一個 XML DOM 對象,然后用 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>
我們可以把這兩個文 sample.htm 和 address.xml 件保存到同一目錄 /xml 中,然后通過在瀏覽器中打開的方式執(zhí)行 sample.htm 文件。它應(yīng)該生成如下所示結(jié)果:
這里,可以看到我們提取了每個子節(jié)點并顯示了它們的值。
相關(guān)文章
- 這篇文章主要介紹了詳解XML編程中的模式定義XSD,講解了如何在XML文檔中聲明模式及定義類型等內(nèi)容,需要的朋友可以參考下2016-02-15
- 這篇文章主要介紹了XML中的DTD文檔類型定義,是XML入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2016-02-15
- 這篇文章主要介紹了XML代碼編寫的編碼與驗證問題,與HTML類似,XML文件的編碼也能在序言部分被指定,需要的朋友可以參考下2016-02-15
- 這篇文章主要介紹了XML中的處理指令,處理指令在XML中并不常用,稍作了解即可,需要的朋友可以參考下2016-02-15
- 這篇文章主要介紹了XML對代碼中的空白處理,文中介紹到了XML書寫中的有效空白與無效空白的區(qū)分,需要的朋友可以參考下2016-02-14
- 這篇文章主要介紹了XML中的字符實體與字符數(shù)據(jù),文中所說的CDATA片段即是指字符數(shù)據(jù)即不由解析器解析的文本塊,需要的朋友可以參考下2016-02-14
- 這篇文章主要介紹了詳解XML中的代碼注釋書寫方法,文章中總結(jié)了注釋使用的一些注意點,比如XML不支持嵌套注釋等,需要的朋友可以參考下2016-02-14
- 這篇文章主要介紹了XML中的屬性學(xué)習(xí)教程,包括使用屬性將數(shù)據(jù)存儲在子元素中的例子,需要的朋友可以參考下2016-02-14
- 這篇文章主要介紹了XML中的標簽與元素的使用,是XML入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2016-02-14
- 這篇文章主要介紹了XML中的文檔與聲明用法,是XML入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2016-02-04