使用dom4j解析器解析xml檔案
阿新 • • 發佈:2019-01-08
解析xml檔案目前用得最多的就是Dom4j解析器,被很多企業認可,在這之前還有w3c釋出的dom解析器,但後來逐漸被棄用了,Dmo4j解析器使用起來更簡單,邏輯更清晰,備受開發者喜愛。
Dom4j解析器開始解析前都將檔案載入到記憶體中,所以就出現了“讀快寫慢”的現象,但並沒有影響它受歡迎的程度。如果xml檔案過於龐大,就要考慮使用SAX解析了,因為SAX是逐行解析,並不需要等待載入完成就可以馬上解析。
使用Dom4j解析器解析xml檔案前,需要下載jar包支援,這裡使用Maven技術匯入jar包,
建立一個java專案再轉換成Maven專案,在pom.xml檔案中新增如下程式碼:
【java轉Maven專案教程:http://blog.csdn.net/weixin_36146275/article/details/54972744】<dependencies> <!-- https://mvnrepository.com/artifact/dom4j/dom4j --> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency> </dependencies>
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解析邏輯非常清晰,核心點就在於遞迴思想——層層呼叫自身方法。