zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    HDU 1022 Train Problem I
    HDU 1702 ACboy needs your help again!
    HDU 1294 Rooted Trees Problem
    HDU 1027 Ignatius and the Princess II
    HDU 3398 String
    HDU 1709 The Balance
    HDU 2152 Fruit
    HDU 1398 Square Coins
    HDU 3571 N-dimensional Sphere
    HDU 2451 Simple Addition Expression
  • 原文地址:https://www.cnblogs.com/zblwyj/p/10845742.html
Copyright © 2011-2022 走看看