您好,登錄后才能下訂單哦!
小編給大家分享一下XML解析中DOM解析的案例分析,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
一、概念
xml文件多用于信息的描述,所以在得到一個xml文檔之后按照xml中的元素取出對應的信息就是xml的解析。Xml解析有兩種方式,一種是DOM解析,另一種是SAX解析,兩種操作的方式如圖。
二、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轉換為樹的結構為:
DOM解析中有以下4個核心操作接口
Document:此接口代表了整個xml文檔,表示為整個DOM的根,即為該樹的入口,通過該接口可以訪問xml中所有元素的內容。其常用方法如下。
(注:上述圖中雖未畫出,但是name和email的屬性也分別為一個節點)
Document常用方法
Node:此接口在整個DOM樹中有著舉足輕重的地位,DOM操作的核心接口都繼承于Node(Document、Element、Attr)。在DOM樹中,每一個Node接口代表了一個DOM樹節點
Node接口常用方法
NodeList:此接口表示一個點的集合,一般用于有序關系的一組節點。
NodeList常用方法
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()); } } }
上述代碼則從第四處開始分析:
通過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;
看完了這篇文章,相信你對XML解析中DOM解析的案例分析有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。