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

 如果有帮助到大家,希望大家给个赞,谢谢!

原文地址:https://www.cnblogs.com/zblwyj/p/10845742.html