1. 程式人生 > >xml(Dom4J)解析原理及程式碼--Dom4J學習小計

xml(Dom4J)解析原理及程式碼--Dom4J學習小計

Dom4J解析xml原理:簡單地說,就是通過解析器將整個文件讀取到Document物件中(載入成Document樹),然後通過Document物件中可以獲取到節點(Node)物件(Node物件有幾種分類:標籤、屬性、文字和註釋),得到了Node物件,就可以對整個xml進行解析了。

解析(將原xml原樣輸出)的程式碼如下:

import java.io.File;
import java.util.Iterator;
import java.util.List;


import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.Text;
import org.dom4j.io.SAXReader;
import org.junit.Test;




public class readXmlFile {
@Test
public void readXmlFile() throws Exception{
SAXReader reader = new SAXReader();//獲取解析器
Document doc = reader.read(new File("./xmlFile/contact.xml"));//讀取xml文件
Element elem = doc.getRootElement();//首先獲得根節點
StringBuffer sb = new StringBuffer();
getAllChildren(elem,sb);//獲取根節點下所有的節點
System.out.println(sb);//輸出解析的結果
}

public void getAllChildren(Element elem,StringBuffer str){
str.append("<"+elem.getName());//輸出當前節點的名稱
List<Attribute> list = elem.attributes();//查詢當前標籤的所有屬性
if(list != null){//如果不為空,則遍歷所有屬性
for(Attribute attr:list){
str.append(" "+attr.getName()+"=\""+attr.getText()+"\"");
}
}
str.append(">");
Iterator<Node> nodes = elem.nodeIterator();//獲取當前節點下的所有子節點
while(nodes.hasNext()){
Node node = nodes.next();
if(node instanceof Element){//如果是標籤節點,則遞迴進行解析
getAllChildren((Element)node, str);
}
if(node instanceof Text){//如果是文字節點,則輸出
str.append(node.getText());
}
}
str.append("</"+ elem.getName() +">");
}
}