XML解析的四种方法:
1. DOM:形成树结构,有助于更好的理解、掌握,且代码容易编写。
解析过程中,树结构保存在内存中,方便修改。
2. SAX解析:采用事件驱动模式,对内存耗费比较小。
适用于只处理XML文件的数据时
3. JDOM :仅使用具体类,而不使用接口。
API大量使用了Collections
4. DOM4J解析:JDOM的一种智能分支,它合并了许多超出基本XML文档表示的功能。
它使用接口和抽象基本类方法
具有性能优异,灵活性好,功能强大和极端易用的特点。
是一个开放源码的文件。
以下是Dom4j解析xml文件并转型成为OBject对象放入LIST的演示:
/**
*
*/
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class TestDOMJ {
public static void main(String[] args) throws DocumentException {
//创建SAXReader对象
SAXReader reader = new SAXReader();
//调用read方法
Document doc = reader.read(new File("Person.xml"));
//获取根元素
Element root = doc.getRootElement();
//通过迭代器遍历直接节点
for (Iterator itebook=root.elementIterator();itebook.hasNext();) {
Element bookEl =itebook.next();
//获得book属性
for (Iterator itrAtt=bookEl.attributeIterator(); itrAtt.hasNext();) {
Attribute att = itrAtt.next();
System.out.println(att.getName()+"\t"+att.getValue());
}
}
List plist= new ArrayList();
System.out.println("/");
for (Iterator itebook=root.elementIterator();itebook.hasNext();) {
Person per = new Person();
Element bookEl =itebook.next();
for (Iterator ite = bookEl.elementIterator(); ite.hasNext();) {
Element type = ite.next();
System.out.println(type.getName()+"\t"+type.getText());
String nName = type.getName();
switch (nName) {
case "name":
per.setName(type.getText());
break;
case "age":
per.setAge(type.getText());
break;
case "station":
per.setStation(type.getText());
break;
case "salary":
per.setSalary(type.getText());
break;
case "subsidy":
per.setSubsidy(type.getText());
break;
}
}
//放入集合之中
plist.add(per);
System.out.println("---------------------------");
}
//遍历
for (Person p : plist) {
System.out.println(p.getName()+"\t"+p.getAge()+"\t"+p.getStation()+"\t"+p.getSalary()+"\t"+p.getSubsidy());
}
}
}
用于存储xml信息的类:
public class Person {
private String name;
private String age;
private String station;
private String salary;
private String subsidy;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getStation() {
return station;
}
public void setStation(String station) {
this.station = station;
}
public String getSalary() {
return salary;
}
public void setSalary(String salary) {
this.salary = salary;
}
public String getSubsidy() {
return subsidy;
}
public void setSubsidy(String subsidy) {
this.subsidy = subsidy;
}
public Person(String name, String age, String station, String salary, String subsidy) {
super();
this.name = name;
this.age = age;
this.station = station;
this.salary = salary;
this.subsidy = subsidy;
}
public Person() {
super();
}
}
xml源文件
高老三
18
程序员
30000
5000
高小二
19
讲师
35000
2000
高小四
20
教授
20000
3000