1. 程式人生 > >使用dom4j解析器解析xml檔案

使用dom4j解析器解析xml檔案

解析xml檔案目前用得最多的就是Dom4j解析器,被很多企業認可,在這之前還有w3c釋出的dom解析器,但後來逐漸被棄用了,Dmo4j解析器使用起來更簡單,邏輯更清晰,備受開發者喜愛。

Dom4j解析器開始解析前都將檔案載入到記憶體中,所以就出現了“讀快寫慢”的現象,但並沒有影響它受歡迎的程度。如果xml檔案過於龐大,就要考慮使用SAX解析了,因為SAX是逐行解析,並不需要等待載入完成就可以馬上解析。

使用Dom4j解析器解析xml檔案前,需要下載jar包支援,這裡使用Maven技術匯入jar包,

建立一個java專案再轉換成Maven專案,在pom.xml檔案中新增如下程式碼:

	<dependencies>
		<!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
		<dependency>
			<groupId>dom4j</groupId>
			<artifactId>dom4j</artifactId>
			<version>1.6.1</version>
		</dependency>
	</dependencies>
【java轉Maven專案教程:http://blog.csdn.net/weixin_36146275/article/details/54972744】

ElementNode.xml:本文使用這種格式的xml檔案演示Dom4j如何解析xml檔案

<?xml version="1.0" encoding="UTF-8"?>
<Users class="1">
	<user>
		<id>1</id>
		<name>Tom</name>
		<age>21</age>
	</user>
	<user>
		<id>2</id>
		<name>Jerry</name>
		<age>23</age>
	</user>
	<user>
		<id>3</id>
		<name>Chana</name>
		<age>18</age>
	</user>
</Users>

Dom4j.java:此類涉及遞迴遍歷,如果不清楚什麼是遞迴,可以到知乎去看看【https://www.zhihu.com/question/20507130】

import java.io.File;
import java.util.Iterator;
import java.util.List;
import javax.xml.parsers.SAXParser;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class Dom4j {
	/**
	 * 遞迴遍歷所有父節點、子節點
	 * @param ele
	 */
	public static void parserNode(Element ele){
		
		System.out.println(ele.getName()+":"+ele.getText().trim());
		//從Users根節點開始遍歷,像【屬性=值】的形式存為一個Attribute物件儲存在List集合中
		List<Attribute> attrList = ele.attributes();
		for(Attribute attr : attrList){
			//每迴圈一次,解析此節點的一個【屬性=值】,沒有則輸出空
			String name = attr.getName();
			String value = attr.getValue();
			System.out.println(name+"="+value);
		}
		
		List<Element> eleList = ele.elements();
		//遞迴遍歷父節點下的所有子節點
		for(Element e : eleList){
			parserNode(e);
		}
	}
	
	public static void main(String[] args) {
		SAXReader saxReader = new SAXReader();
		try {
			Document document = saxReader.read(new File("src/ElementNode.xml"));
			Element ele = document.getRootElement();
			parserNode(ele);
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

執行結果:

Users:
class=1
user:
id:1
name:Tom
age:21
user:
id:2
name:Jerry
age:23
user:
id:3
name:Chana
age:18

Dom4j解析邏輯非常清晰,核心點就在於遞迴思想——層層呼叫自身方法。