Java之dom4j的簡單解析和生成xml的應用
阿新 • • 發佈:2018-01-17
util 讀寫 pro artifact gettext depend bject sta rgs
一、dom4j是一個Java的XML API,是jdom的升級品,用來讀寫XML文件的。dom4j是一個十分優秀的JavaXML API,具有性能優異、功能強大和極其易使用的特點,它的性能超過sun公司官方的dom技術,同時它也是一個開放源代碼的軟件,可以在SourceForge上找到它。在IBM developerWorks上面還可以找到一篇文章,對主流的Java XML API進行的性能、功能和易用性的評測,所以可以知道dom4j無論在哪個方面都是非常出色的。如今可以看到越來越多的Java軟件都在使用dom4j來讀寫XML,特別值得一提的是連Sun的JAXM也在用dom4j。這已經是必須使用的jar包, Hibernate也用它來讀寫配置文件。
二、dom4j的xml解析過程
1)加入依賴包
<dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.2</version> </dependency>
說明:gson的目的是用來將數據轉成json的形式
2)xml模板
<root> <test1>test1</test1> <test1>test11</test1> <test2> <test3>test3</test3> <test4>test4</test4> </test2> <test2> <test3>test5</test3> <test4>test6</test4> </test2> </root>
3)解析
import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; import java.io.File;import java.util.List; public class Dom4jUtil { public static void main(String[] args) throws Exception { SAXReader reader = new SAXReader(); Document document = reader.read(new File("d:\\1.xml")); Element root = document.getRootElement(); JsonObject jsonObject = readXml(root); JsonObject jsonObjectRepetition = readXmlRepetition(root); Gson gson = new Gson(); System.out.println(gson.toJson(jsonObject)); System.out.println(gson.toJson(jsonObjectRepetition)); } /** * 處理存在重復的標簽數據(弊端,所有數據都是數組的方式存在,對xml的設計有要求,不然數據不好處理) * @param root * @return */ public static JsonObject readXmlRepetition(Element root) { //獲取節點下面的所有元素 List<Element> elements = root.elements(); //如果存在則處理數據或者直接返回節點數據 if (elements != null && elements.size() > 0) { //聲明一個json數據 JsonObject jsonObject = new JsonObject(); //聲明一個json數組 JsonArray mList = new JsonArray(); //遍歷所有元素 for (Element element:elements) { //讀取節點數據直到節點下面沒有其他元素 JsonObject jo = readXml(element); mList.add(jo); } //加入json jsonObject.add(root.getName(), mList); return jsonObject; } else { JsonObject jsonObject = new JsonObject(); jsonObject.addProperty(root.getName(), root.getText()); return jsonObject; } } /** * 處理普通xml格式數據,不存在重復的標簽(弊端,不能處理統一標簽下的重復標簽) * @param root * @return */ public static JsonObject readXml(Element root) { //獲取節點下面的所有元素 List<Element> elements = root.elements(); //如果存在則處理數據或者直接返回節點數據 if (elements != null && elements.size() > 0) { //聲明一個json數據 JsonObject map = new JsonObject(); //這個是處理所有下面的數據保存在一個json中 JsonObject jo = new JsonObject(); for (Element element:elements) { JsonObject m = readXml(element); jo.add(element.getName(), m.get(element.getName())); } map.add(root.getName(), jo); return map; } else { JsonObject map = new JsonObject(); map.addProperty(root.getName(), root.getText()); return map; } } }
4)測試結果展示
{"root":{"test1":"test11","test2":{"test3":"test5","test4":"test6"}}}
{"root":[{"test1":"test1"},{"test1":"test11"},{"test2":{"test3":"test3","test4":"test4"}},{"test2":{"test3":"test5","test4":"test6"}}]}
三、重點說明一下
1)上面寫出來的工具,基本上都是用來處理特定數據的工具
2)方法的實現上面還可以完善,但是我一直沒有找到好的數據表現形式所以寫了兩個方法
3)可以參考這種做法,進一步做深度解析
四、xml的創建
public static void main(String[] args) throws Exception { Document document = DocumentHelper.createDocument(); Element root = document.addElement("root"); Element test1 = root.addElement("test1"); test1.addText("test1"); Element test2 = root.addElement("test2"); test2.addText("test2"); OutputStream outputStream = new FileOutputStream("d:\\2.xml"); XMLWriter xmlWriter = new XMLWriter(outputStream); xmlWriter.write(document); xmlWriter.close(); }
備註:這裏xml創建不細講,很多時候都是根據業務來的。
Java之dom4j的簡單解析和生成xml的應用