dom4j和jaxb
这篇文章研究了使用多种不同方法将XML文档编组为Java对象的性能。 XML文档非常简单。 它包含一个Person实体的集合。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persons>
<person>
<id>person0</id>
<name>name0</name>
</person>
<person>
<id>person1</id>
<name>name1</name>
</person>
...
XML中的Person实体有一个对应的Person Java对象
..
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"id",
"name"
})
public class Person {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String value) {
this.name = value;
}
}
和一个PersonList对象代表一个Persons集合。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "persons")
public class PersonList {
@XmlElement(name="person")
private List<person> personList = new ArrayList<person>();
public List<person> getPersons() {
return personList;
}
public void setPersons(List<person> persons) {
this.personList = persons;
}
}
研究的方法是:
- 各种口味的JAXB
- 萨克斯
- DOM
在所有情况下,目标都是使XML文档中的实体到达相应的Java对象。 在Person和PersonList POJOS上的JAXB批注用于JAXB测试中。 可以在SAX和DOM测试中使用相同的类(注释将被忽略)。 最初是参考
使用了JAXB,SAX和DOM的实现。 然后使用Woodstox STAX解析。 在某些JAXB解组测试中会调用此方法。
测试是在运行Windows 7的戴尔笔记本电脑,2.1 GHz奔腾双核CPU上进行的。
测试1 –使用JAXB解组Java文件。
@Test
public void testUnMarshallUsingJAXB() throws Exception {
JAXBContext jc = JAXBContext.newInstance(PersonList.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
PersonList obj = (PersonList)unmarshaller.unmarshal(new File(filename));
}
测试1说明了JAXB的编程模型有多简单。 从XML文件到Java对象非常容易。 无需参与编组和解析的精妙细节。
测试2 –使用JAXB解组流源
测试2与测试1类似,不同之处在于,这次流源对象包装在文件对象周围。 Streamsource对象向JAXB实现提供提示以流式传输文件。
@Test
public void testUnMarshallUsingJAXBStreamSource() throws Exception {
JAXBContext jc = JAXBContext.newInstance(PersonList.class);
Unmarshaller unmarshaller = jc.crea