首頁  >  文章  >  後端開發  >  有關XML解析中DOM解析的詳細介紹

有關XML解析中DOM解析的詳細介紹

王林
王林轉載
2019-08-26 17:30:326277瀏覽

一、概念

xml檔案多用於資訊的描述,所以在得到一個xml文件之後依照xml中的元素取出對應的資訊就是xml的解析。 Xml解析有兩種方式,一種是DOM解析,另一種是SAX解析,兩種操作的方式如圖。

有關XML解析中DOM解析的詳細介紹

二、DOM解析

#基於DOM解析的xml分析器是將其轉換為一個物件模型的集合,用樹這種資料結構會將資訊儲存。透過DOM接口,應用程式可以在任何時候存取xml文件中的任何一部分數據,因此這種利用DOM介面存取的方式也被稱為隨機存取。

這種方式也有缺陷,因為DOM分析器將整個xml檔案轉換為了樹存放在記憶體中,當檔案結構較大或資料較複雜的時候,這種方式對記憶體的要求就比較高,且對於結構複雜的樹進行遍歷也是非常耗時的操作。不過DOM所採用的樹狀結構與xml儲存資訊的方式相吻合,同時其隨機存取還可利用,所以DOM介面還是具有廣泛的使用價值。

這裡我們舉個栗子來說明xml轉換為樹的資料結構。

<?xml version="1.0" encoding="GBK"?>
<address>
	<linkman>
		<name>Van_DarkHolme</name>
		<email>van_darkholme@163.com</email>
	</linkman>
	<linkman>
		<name>Bili</name>
		<email>Bili@163.com</email>
	</linkman>
</address>

將該xml轉換為樹的結構為:

有關XML解析中DOM解析的詳細介紹

#DOM解析中有以下4個核心操作介面

Document:此介面代表了整個xml文檔,表示為整個DOM的根,即為該樹的入口,透過該介面可以存取xml中所有元素的內容。其常用方法如下。

(註:上述圖中雖未畫出,但name與email的屬性也分別為一個節點)

 Document常用方法

有關XML解析中DOM解析的詳細介紹

Node:此介面在整個DOM樹中有著舉足輕重的地位,DOM操作的核心介面都繼承於Node(Document、Element、Attr)。在DOM樹中,每個Node介面代表了一個DOM樹節點

Node介面常用方法

有關XML解析中DOM解析的詳細介紹

NodeList:此介面表示一個點的集合,一般用於有序關係的一組節點。

NodeList常用方法

有關XML解析中DOM解析的詳細介紹

NamedNodeMap:此介面表示一組節點和其唯一名稱對應的一一關係,主要用於節點屬性的表示

除了以上四個核心介面外,如果一個程式需要進行DOM解析操作,則需要按照以下步驟進行:

1. 建立DocumentBuilderFactor,用於取得DocumentBuilder物件:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

2. 建立DocumentBuidler:

DocumentBuilder builder = factory.newDocumentBuilder();

3. 建立Document物件,取得物件,取得物件,取得樹的入口:

Document doc = builder.parse(“xml檔案的相對路徑或絕對路徑”);

4. 建立NodeList:

NodeList n1 = doc .getElementByTagName(“讀取節點”);

5. 進行xml資訊取得

public class DOMDemo01 {
	
	public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException{
		//建立DocumentBuilderFactor,用于获得DocumentBuilder对象:
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		//2.建立DocumentBuidler:
		DocumentBuilder builder = factory.newDocumentBuilder();
		//3.建立Document对象,获取树的入口:
		Document doc = builder.parse("src//dom_demo_02.xml");
		//4.建立NodeList:
		NodeList node = doc.getElementsByTagName("linkman");
		//5.进行xml信息获取
		for(int i=0;i<node.getLength();i++){
			Element e = (Element)node.item(i);
			System.out.println("姓名:"+
					e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
			System.out.println("邮箱:"+
					e.getElementsByTagName("email").item(0).getFirstChild().getNodeValue());
		}	
		
	}
}

有關XML解析中DOM解析的詳細介紹

上述程式碼則從第四處開始分析:

透過doc.getElementByTagName(“linkman”)我們得到了一個NodeList,上述xml檔中包含了兩個linkman的節點,所以這裡NodeList中包含了兩個Node(都是linkman節點),然後透過循環的方法來取得xml檔案中的資訊。

Element e = (Element)node.item(i)獲得了linkman節點,即e這裡指向了linkman

e.getElementTagName(“name”).item(0).getFirstChild ().getNodeValue();

getElementTagName(“name”);獲得了該linkman下的所有name節點(其實就1個);

Item(0);取第一個Name節點(就一個);

getFristChild();取得name節點下的文字節點,也就是內容van所在的節點(上面已經提到過,文字內容也是一個單獨的節點,Document方法清單中的createTextNode()就是建立文字節點);

getNodeValue()取得文字節點的值:van_darkholme;

跟多相關問題請存取PHP中文網:XML影片教學

以上是有關XML解析中DOM解析的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除