XML解析(二)

写XML

1. 构建Document对象
在DOM4J 中可以通过自行构建Document对象,并组建树状结构来描述一个XML文档。而构建Document对象,则需要使用DPM4J的DocumentHelper类,它提供了一个静态方法:static Document createDocument()。

Document document = DocumentHelper.createDocument();

2. 向Document对象中添加根元素
Document提供了添加根元素的方法:

Element root = document.addElement("list");

向当前Document中添加给定名字的根元素,并将其以一个Element实例形式返回,以便继续向根元素中追加操作。这里需要注意的是,该方法只能调用一次,否则会抛出文档已经存在根元素的异常,这是因为在XML中只能有一个根元素。

3. 想根元素root中添加子元素
该方法会向当前元素中添加给定名字的子元素,并将其对应的Element对象返回。

//向根元素中添加名为<emp>的子元素
Element empEle = root.addElement("emp");
//向<emp>标签中添加<name>子元素,并将其对应的Element对象返回
Element nameEle = empEle.addElement("name");
//在<name>子元素中添加文本
nameEle.addText(emp.getName()); 
//简写成一行
empEle.addElement("age").addText(String.valueOf(emp.getAge()));
empEle.addElement("gender").addText(emp.getGender());
empEle.addElement("salary").addText(String.valueOf(emp.getSalary());

4. 在Element中的addAttribute方法
除了向元素中添加子元素外,我们也经常会给当前元素添加属性。Element类提供了用于添加属性的方法:

Element addAttribute(String name,String value)
//例:添加属性 id
empEle.addAttribute("id",emp.getId()+"");

该方法会向当前元素中添加给定名字以及对应的值的属性。返回值依然为当前元素,这样做的目的在于我们连续添加元素时的代码复杂度可以减低,这个类似StringBuilder的append等方法的道理。
5. 通过XMLWriter输出XML文档
当我们构建好Docuement后,我们可以通过XMLWriter来输出。

XMLWriter writer = new XMLWriter(
    new FileOutputStream("myemp.xml"),OutputFormat.createPrettyPrint()
    );
    writer.write(document);
    writer.close();

//写出
XMLWriter writer = new XMLWriter();//构建用于写xml的输出流
FileOutputStream fos = new FileOutputStream("builder.xml");
writer.setOutputStream(fos);
writer.write(doc);//将Document对象输出到文件中
writer.close();

例:
Emp对象:

package XML;

public class Emp {
    private int id;
    private String name;
    private int age ;
    private String gender;
    private int salary;

    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 int getSalary() {
        return salary;
    }
    public void setSalary(int salary) {
        this.salary = salary;
    }

    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public String toString() {
        return id+","+name+","+age+","+gender+","+salary;
    }
}

将Emp对象输出为XML文档

package XML;

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;

public class WriteXmlDemo2 {
    public static void main(String[] args) {
        List <Emp> list = new ArrayList<Emp>();
        list.add(new Emp(1, "张三", 22, "男", 6000));
        list.add(new Emp(2, "李四", 23, "女", 10000));
        list.add(new Emp(3, "王五", 19, "男", 9000));
        list.add(new Emp(4, "赵六", 30, "男", 22000));
        list.add(new Emp(5, "宋七", 28, "男", 4000));
        list.add(new Emp(6, "王八", 29, "男", 7000));

        try {
            //生成空白文档。
            Document document = DocumentHelper.createDocument();
            //添加根元素。
            Element root = document.addElement("list");
            for(Emp emp : list) {
                //向根元素中添加名为<emp>的子元素
                Element empEle = root.addElement("emp");
                //向<emp>标签中添加<name>子标签
                Element nameEle = empEle.addElement("name");
                nameEle.addText(emp.getName());
                empEle.addElement("age").addText(String.valueOf(emp.getAge()));
                empEle.addElement("gender").addText(emp.getGender());
                empEle.addElement("salary").addText(String.valueOf(emp.getSalary()));
                //添加属性 id
                empEle.addAttribute("id",emp.getId()+"");
            }
            XMLWriter writer = new XMLWriter(
                    new FileOutputStream("myemp.xml"),OutputFormat.createPrettyPrint()
                    );
            writer.write(document);
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

结果

<?xml version="1.0" encoding="UTF-8"?>

<list>
  <emp id="1">
    <name>张三</name>
    <age>22</age>
    <gender></gender>
    <salary>6000</salary>
  </emp>
  <emp id="2">
    <name>李四</name>
    <age>23</age>
    <gender></gender>
    <salary>10000</salary>
  </emp>
  <emp id="3">
    <name>王五</name>
    <age>19</age>
    <gender></gender>
    <salary>9000</salary>
  </emp>
  <emp id="4">
    <name>赵六</name>
    <age>30</age>
    <gender></gender>
    <salary>22000</salary>
  </emp>
  <emp id="5">
    <name>宋七</name>
    <age>28</age>
    <gender></gender>
    <salary>4000</salary>
  </emp>
  <emp id="6">
    <name>王八</name>
    <age>29</age>
    <gender></gender>
    <salary>7000</salary>
  </emp>
</list>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值