一、前言

現在有不少需求,是需要我們解析xml檔案中的資料,然後匯入到資料庫中,當然解析xml檔案也有好多種方法,小編覺得還是DOM4J用的最多最廣泛也最好理解的吧.小編也是最近需求裡遇到了,就來整理一下自己的理解,只適合剛剛學習的,一起理解!今天我們把解析xml檔案和生成xml檔案在一起來展示.

二、準備依賴

      <dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>

三、生成xml檔案

  • 生成標準展示

  • 生成xml程式碼
    /**
* 使用DOM4J生成xml方法
*/
public static void createXml(){
try {
// 建立document物件
Document document = DocumentHelper.createDocument();
// 建立根節點bookRoot
Element StudentRoot = document.addElement("StudentRoot");
// 向根節點中新增第一個節點
Element book1 = StudentRoot.addElement("student");
// 向子節點中新增屬性
book1.addAttribute("id","1");
// 向節點中新增子節點
Element name = book1.addElement("name");
// 向子節點賦值
name.setText("小喬");
Element price = book1.addElement("age");
price.setText("18");
// 向根節點中新增第二個節點
Element book2 = StudentRoot.addElement("student");
book2.addAttribute("id","2").addElement("name").setText("大橋");
book2.addElement("age").setText("20"); // 向根節點中新增第三個節點
Element book3 = StudentRoot.addElement("student");
book3.addAttribute("id","3").addElement("name").setText("孫策");
book3.addElement("age").setText("21"); // 設定生成xml的格式
OutputFormat of = OutputFormat.createPrettyPrint();
// 設定編碼格式
of.setEncoding("UTF-8"); // 生成xml檔案
File file = new File("E:\\student.xml");
if (file.exists()){
file.delete();
}
//建立一個xml文件編輯器
XMLWriter writer = new XMLWriter(new FileOutputStream(file), of);
//把剛剛建立的document放到文件編輯器中
writer.write(document);
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}

四、解析xml檔案

解析xml的檔案就是剛剛匯出的那個樣子,我們展示兩種情況,一個是知道屬性名字和子元素名字的我們把解析的xml檔案資料放到實體類中.不知道的就直接列印到控制檯.

  • 實體類展示
import lombok.Data;

@Data
public class Student { private int id; private String name; private int age;
}
  • 解析xml檔案方法
     public static void analysis(){
// 把要解析的xml變成file檔案
File file = new File("E:\\student.xml"); // 獲取解析器物件
SAXReader reader = new SAXReader();
// 把檔案解析成document樹
Document document = null;
try {
document = reader.read(file);
} catch (DocumentException e) {
e.printStackTrace();
}
// 獲取根節點
Element studentRoot = document.getRootElement();
// 獲取根節點中所有節點
List<Element> elements = studentRoot.elements(); // 存放xml中節點的資料集合
List<Student> list = new ArrayList<>(); // 便利所有節點
for (Element child : elements) { Student student = new Student(); //已知屬性名情況下
student.setId(Integer.parseInt(child.attributeValue("id")));//獲取屬性的資料
//已知子元素名的情況下
student.setName(child.elementText("name"));//獲取元素中值
student.setAge(Integer.parseInt(child.elementText("age")));//獲取元素中值 list.add(student); //未知屬性名情況下
List<Attribute> attributes = child.attributes();
for (Attribute attribute : attributes) {
System.out.println(attribute.getName() + "---> " + attribute.getValue());
} //未知子元素名情況下
List<Element> elementList = child.elements();
for (Element ele : elementList) {
System.out.println(ele.getName() + "--->" + ele.getText());
}
}
//把解析xml出來的資料集合列印
list.forEach(x-> System.out.println(x));
}
  • 解析結果展示

五、總結

這樣我們就把DOM4J來生成xml檔案和解析xml檔案就都操作完成了,有什麼問題留言哦!!謝謝大家