Java動態生成和解析xml文件步驟詳解


首先聲明,這個地方是利用dom4j進行解析和生成,需要用到dom4j的jar包,所以首先需要我們獲取jar包:

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

生成xml文件代碼案列:

package day12;

import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

/**
 * 寫出XML文檔
 */
public class WriteXmlDemo {
    public static void main(String[] args) {
        List<Emp> empList = new ArrayList<Emp>();
        empList.add(new Emp(1,"張三",22,"男",3000));
        empList.add(new Emp(2,"李四",23,"女",4000));
        empList.add(new Emp(3,"王五",24,"男",5000));
        empList.add(new Emp(4,"趙六",25,"女",6000));
        empList.add(new Emp(5,"錢七",26,"男",7000));
        empList.add(new Emp(6,"傳奇",21,"男",8000));

        /*
         * 寫出XML文檔的大致步驟
         * 1.創建空白文檔對象Document
         * 2.向該文檔中添加根元素
         * 3.按照規定的XML文檔結構從根元素開始,逐級添加子元素,已完成該結構
         * 4.創建XMLWriter
         * 5.將Document對象寫出成XML文檔
         * 6.將XMLWriter關閉
         */
        //1
        Document doc = DocumentHelper.createDocument();
        /*
         * 2.Element addElement(String name)
         * Document提供的該方法是用來向當前文檔中添加給定名字的根元素。並將其以一個Element
         * 實例返回以便於繼續對該根元素操作。
         * 需要注意,該方法只能調用一次,因為一個文檔中只能有一個根元素。
         */
        Element root = doc.addElement("list");
        //將所有員工信息以若干<emp>標簽形式添加到<list>中
        for(Emp emp:empList){
            /*
             * Element提供了向其中添加子標簽的方法:
             * Element addElement(String name)
             */
            Element empEle = root.addElement("emp");
            //添加<name>標簽
            Element nameEle = empEle.addElement("name");
            nameEle.addText(emp.getName());
            //添加<age>標簽
            Element ageEle = empEle.addElement("age");
            ageEle.addText(String.valueOf(emp.getAge()));
            //添加<gender>標簽
            Element genderEle = empEle.addElement("gender");
            genderEle.addText(emp.getGender());
            //添加<salary>標簽
            Element salaryEle = empEle.addElement("salary");
            salaryEle.addText(emp.getSalary()+"");
            empEle.addAttribute("id",emp.getId()+"");
        }
        try {
            FileOutputStream fos = new FileOutputStream("myemp.xml");
            XMLWriter writer = new XMLWriter(fos,OutputFormat.createCompactFormat());
            writer.write(doc);
            System.out.println("寫出完畢!");
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
View Code

解析xml文件代碼案列

package day12;

import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

/**
 * 使用DOM4J解析XML文檔
 * @author tarena
 *
 */
public class ParseXMLDemo {
    public static void main(String[] args) {
        /*
         * 讀取emplist文件,將該xml文檔中的所有員工信息解析出來,
         * 並以若干Emp實例保存,然后將這些員工信息存入到一個List集合中。
         */
        /*
         * 使用DOM解析XML的四大致流程:
         * 1.創建SAXReader
         * 2.使用SAXReader讀取要解析的XML文檔,該步驟就是DOM耗時耗資源的地方,
         * 因為會將文檔所有內容解析完畢並存入到內存中。  
         * 讀取方法會返回一個Document對象,該對象就表示解析出來的該XML文檔內容
         * 3.通過Document對象獲取根元素(根標簽)。
         * 4.根據文檔的結構,從根元素開始逐級獲取子元素以達到遍歷XML文檔數據的目的。
         */
        try {
            //1
            SAXReader reader = new SAXReader();

            //2
            Document doc = reader.read(new FileInputStream("emplist.xml"));
            /*
             *3.獲取根元素
             *Element的每一個實例用於表示XML文檔中的一個元素(一對標簽)
             *它提供了很多用於操作當前標簽的方法,其中常用的用於獲取標簽信息的方法有:
             *
             * String getName()  獲取標簽名
             * 
             * Element elements(Sting name) 根據給定名字獲取當前標簽中的子標簽
             * 
             * List elements() 
             * 獲取當前標簽中的所有子標簽,返回的集合中是若干Element實例,每個為一個子元素
             * 
             * List elements(String name)  獲取當前標簽中的所有同名名字元素
             * 
             * String getText()  獲取當前標簽中間的文本
             * 
             * Attribute attribute(String name)  獲取當前標簽中指定名字的屬性
             * 
             */
            Element root = doc.getRootElement();
            List<Emp> empList = new ArrayList<Emp>();
            /*
             * 獲取<list>標簽中的所有<emp>標簽
             */
            List<Element>  list = root.elements();
            /*
             * 將每一個<emp>標簽中的內容取到,並以一個Emp實例保存,然后將該對象存入集合
             */
            for(Element empEle : list){
                // System.out.println(empEle.getName());
                //獲取name
                Element nameEle = empEle.element("name");
                String name  = nameEle.getText();
                System.out.println(name);
                //獲取age
                int age = Integer.parseInt(empEle.elementText("age"));
                System.out.println(age);
                //獲取性別
                String gender = empEle.elementText("gender");
                System.out.println(gender);
                //獲取工資
                int salary = Integer.parseInt(empEle.elementText("salary"));
                System.out.println(salary);

                //獲取ID
                int id = Integer.parseInt(empEle.attributeValue("id"));
                Emp emp = new Emp(id , name , age ,gender, salary);
                empList.add(emp);
            }
            System.out.println("解析完成!");
            for(Emp e:empList){
                System.out.println(e);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
View Code

實體類

package day12;
/**
 * 員工信息
 */
public class Emp {
   private int id;
   private String name;
   private int age;
   private String gender;
   private int salary;
   public Emp(){
       
   }
public Emp(int id, String name, int age, String gender, int salary) {
    super();
    this.id = id;
    this.name = name;
    this.age = age;
    this.gender = gender;
    this.salary = salary;
}
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public int getAge() {
    return age;
}
public void setAge(int age) {
    this.age = age;
}
public String getGender() {
    return gender;
}
public void setGender(String gender) {
    this.gender = gender;
}
public int getSalary() {
    return salary;
}
public void setSalary(int salary) {
    this.salary = salary;
}
@Override
public String toString() {
    return  id + "," + name + "," + age + "," + "," + salary;
}


   
}
View Code

 如果有幫助到大家,希望大家給個贊,謝謝!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM