1. 程式人生 > >XML解析之Dom4並將其解析成對應的實體類

XML解析之Dom4並將其解析成對應的實體類

前言  

  今天和師傅聊天,然後師傅給我佈置了一個小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