1. 程式人生 > >【學習筆記】關於DOM4J:使用DOM4J解析XML文檔

【學習筆記】關於DOM4J:使用DOM4J解析XML文檔

文本 class 中產 獲取 ber exce int() logs hone

一、概述

DOM4J是一個易用的、開源的庫,用於XML、XPath和XSLT中。采用了Java集合框架並完全支持DOM、SAX、和JAXP。

DOM4J最大的特色是使用大量的接口,主要接口都在org.dom4j這個包裏定義:

二、DOM4J的接口

Attribute:定義了XML的屬性;

Branch:是能夠包含子節點的節點,如XML元素(Element)和文檔(Documents)定義了一個公共的行為;

CDATA:定義了XML的CDATA區域;

CharacterData:是一個標識接口,標致基於字符的節點:(CDATA、Comment、Text);

Comment:定義了XML註釋的行為;

Document:定義了XML文檔;

DocumentType:定義了XML的DOCTYPE聲明;

Element:定義了XML文檔;

ElementHandler:定義了Element對象的處理器;

ElementPath:被ElementHandler使用,用於取得當前正在處理的路徑層次信息;

Entity:定義XML的entity;

Node:為所有的DOM4J中XML節點定義了多態行為;

NodeFilter:定義了在DOM4J節點中產生的一個濾鏡或謂詞的行為(predicate);

ProcessingInstruction:定義XML處理指令;

Text:定義XML文本節點;

Visitor:用於實現Visitor模式;

XPath:在分析一個字符串後會提供一個XPath表達式。

三、使用DOM4J操作XML數據

1.Document對象相關

讀取XML文件,獲得document對象。

SAXReader reader = new SAXReader();

Document document = reader.read(new File("input.xml"));

2.節點相關

獲取文檔的根元素

Element rootElm = document.getRootElement();

取得某節點的單個子節點

Element memberElm = root.element("member");//"member"是節點名

取得節點的文字

String text = memberElm.getText();

String text = root.elementText("name");//取得根元素下的name子節點的文字

取得某節點下名為“member”的所有子節點並進行遍歷

List nodes = rootElm.elements("member");

for(Iterator it=nodes.iterator;it.hasNext();){

  Element elm = (Element)it.next();

}

對某節點下的所有子節點進行遍歷

for(Iterator it = root.elementIterator();it.hasNext();){

  Element element = (Element) it.next();

}

在某節點下添加子節點

Element ageElm = newMemberElm.addElement("age");

設置節點文字

ageElm.setText("29");

刪除某節點

parentElm.remove(childElm);//childElm是待刪除的節點,parentElm是其父節點

3.相關屬性

取得某節點下的屬性

Element root = document.getRootElement();

Attribute attribute = root.attribute("size");//屬性名name

取得屬性的文字

String text = attribute.getText();

String text = root.element("name").attributeValue("firstname");

遍歷某節點的所有屬性

Element root = document.getRootElement();

for(Iterator it = root.attributeIterator();it.hasNext();{

  Attribute attribute = (Attribute)it.next();

  String text = attribute.getText();

  System.out.println(text);

}

設置某節點的屬性和文字

newMemberElm.addAttribute("name","sitinspring");

設置屬性的文字

Attribute attribute = root.attribute("name");

attribute.setText("sitinspring");

刪除某屬性

Attribute attribute = root.attribute("size");

root.remove(attribute);

4.將文檔寫入XML文件

(1)文檔中全為英文,不設置編碼格式,直接寫入

XMLWriter writer = new XMLWriter(new FileWriter("output.xml");

writer.write(document);

writer.close();

(2)文檔中含有中文,設置編碼格式在寫入

OutputFormat format = OutputFormat.createPrettyPrint();

format.setEncoding("GBK");

XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);

writer.write(document);

writer.close();

四、案例:使用DOM4J讀取XML文檔,步驟如下:

1.導入DOM4J的jar包

2.指定要解析的XML文件

3.把XML文件轉換成Document對象

4.獲取節點屬性或文本的值

 1 import java.io.File;
 2 import java.util.Iterator;
 3 
 4 import org.dom4j.Document;
 5 import org.dom4j.DocumentException;
 6 import org.dom4j.Element;
 7 import org.dom4j.io.SAXReader;
 8 
 9 /**
10  * 使用DOM4J解析XML文檔
11  * @author Administrator
12  *
13  */
14 public class PhoneDom4j {
15 
16     public static void main(String[] args) {
17         Document phone = null;
18         try {
19             //加載DOM樹
20             SAXReader saxReader = new SAXReader();
21             phone = saxReader.read(new File("src/phoneInfo.xml"));
22         } catch (DocumentException e) {
23             e.printStackTrace();
24         }
25         //獲取xml的根節點
26         Element root = phone.getRootElement();
27         //遍歷所有的Brand標簽
28         for (Iterator<?> itBrand = root.elementIterator(); itBrand.hasNext();) {
29             Element brand = (Element) itBrand.next();
30             //輸出標簽的屬性
31             System.out.println("品牌:"+brand.attributeValue("name"));
32             //遍歷Type標簽
33             for (Iterator<?> itType = brand.elementIterator(); itType.hasNext();) {
34                 Element type = (Element) itType.next();
35                 //輸出標簽的name屬性
36                 System.out.println("\t型號:"+type.attributeValue("name"));
37             }
38         }
39 
40     }
41 
42 }

【學習筆記】關於DOM4J:使用DOM4J解析XML文檔