XML解析之Dom4並將其解析成對應的實體類
阿新 • • 發佈:2018-12-01
前言
今天和師傅聊天,然後師傅給我佈置了一個小Demo讓我聯絡下,將XML解析成對應的實體類,我的初衷是分別用Dom4j還有SAX解析順便對比下兩種方式的區別以及是否有聯絡
第一種方式Dom4j的方式進行解析
1.我採用Maven專案
<dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency>
先將這個配置放到你的pom.xml中
2.解決一個小問題在Maven專案中如何讀取Resources下面的檔案
檔案結構如下
讀取的程式碼如下
@Test
public void test1() {
ClassLoader classLoader = TestReaderXML.class.getClassLoader();
String resource = classLoader.getResource(“resources/parents.xml”).getFile();
File file = new File(resource);
if (file.exists()) {System.out.println("檔案讀取到了"); return; } System.out.println("檔案沒有讀取到"); return; }
執行結果
下面我們來繼續
XML檔案為:
<?xml version="1.0" encoding="UTF-8"?> <parents> <parent> <name>Mrs.zhang</name> <age>18</age> <address>東北</address> </parent> <parent> <name>Mrs.wang</name> <age>19</age> <address>河南</address> </parent> <parent> <name>Mrs.li</name> <age>20</age> <address>河北</address> </parent> </parents>
測試方法為:
public class AnalyzeXMLofDom4j { public static void main(String[] args) { /** 將檔案讀取成一個File流檔案 */ ClassLoader classLoader = AnalyzeXMLofDom4j.class.getClassLoader(); String resource = classLoader.getResource("resources/parents.xml").getFile(); File file = new File(resource); // 建立SaxReader物件 SAXReader reader = new SAXReader(); try { // 通過read方法讀取一個檔案,轉化成Document物件 Document document = reader.read(file); // 獲取根節點元素物件 Element root = document.getRootElement(); /** 1. 將根節點的名字打出來*/ System.out.println(root.getName()); /** 2. 下面繼續將所有的xml資訊都讀出來*/ Iterator<?> iterator = root.elementIterator(); while (iterator.hasNext()) { /** 將元素迭代起來 */ Element childElement = (Element)iterator.next(); /** 這樣子是不是 複雜度很高呀 */ /** parent 子元素集合 */ Element elementName = childElement.element("name"); String valueName = elementName.getText(); Element elementAge = childElement.element("age"); String valueAge = elementAge.getText(); Element elementAddress = childElement.element("address"); String valueAddress = elementAddress.getText(); System.out.println("---------"); System.out.println(valueName); System.out.println(valueAge); System.out.println(valueAddress); } System.out.println("下一個真正的子元素~"); } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
執行結果為:
程式碼的百度雲盤地址為: https://pan.baidu.com/s/1vEp5iHGV-8DkhD4zaE97lw