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

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

  • 相关阅读:
    BZOJ 1176: [Balkan2007]Mokia
    BZOJ 4034: [HAOI2015]T2
    BZOJ 4031: [HEOI2015]小Z的房间
    BZOJ 4128: Matrix
    JSP学习-08-JavaBean
    JSP学习-标准标签库
    电影剧本写作基础
    JSP学习-09-自定义标签
    JSP学习-07Cookie 与Session
    JSP学习-06过滤器
  • 原文地址:https://www.cnblogs.com/zblwyj/p/10845742.html
Copyright © 2011-2022 走看看