写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>