需求:利用dom4j读取XML文件,并封装成对象。
以下是要读取的XML文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="111">
<name>zhangsan</name>
<age>20</age>
</person>
<person id="222">
<name>lisi</name>
<age>22</age>
</person>
<person id="333">
<name>wangwu</name>
<age>21</age>
</person>
</persons>
方法如下:
先创建存放节点信息的类。
public class Person
{
private String id;
private String name;
private int age;
public Person()
{
}
public Person(String id, String name, int age)
{
this.id = id;
this.name = name;
this.age = age;
}
public String getId()
{
return id;
}
public void setId(String 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 toString()
{
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
然后创建一个能够读取XML文件并封装成对象放到集合容器中的工具类。
public class XMLReader
{
public static ArrayList getInfo(File file) throws Exception
{
//获得解析器
SAXReader reader=new SAXReader();
//获得要解析的文档对象
Document doc=reader.read(file);
//获得根节点
Element root=doc.getRootElement();
//使用ArrayList容器存储每个子节点,即每个Person对象
ArrayList<Person> persons = new ArrayList<Person>();
//获得根节点的所有子节点,并遍历取出数据,封装到Person对象中
List root_childnodes=root.elements();
for(int i=0;i<root_childnodes.size();i++)
{
//创建Person对象,用于保存每个子节点信息
Person person=new Person();
//获得第i个子节点
Element e=(Element) root_childnodes.get(i);
//获得该节点的属性id值
String id_value=e.attributeValue("id");
//为对应的Person对象的id 赋值
person.setId(id_value);
//遍历<person>的子节点,以取出数据
List person_childnodes=e.elements();
for(int j=0;j<person_childnodes.size();j++)
{
//获得第j个子节点
Element temp=(Element) person_childnodes.get(j);
//获得该节点的节点名
String str=temp.getName();
switch(str)
{
case "name":
person.setName(temp.getText());
break;
case "age":
person.setAge(Integer.valueOf(temp.getText()));
break;
}
}
//结束一轮<person>节点的遍历,将Person对象存入集合,并清空
persons.add(person);
person=null;
}
return persons;
}
}
最后创建主类用于测试。
public class Test
{
public static void main(String[] args) throws Exception
{
//要读取的文件
File file=new File("Person.xml");
//获取将该文件信息存储的集合
ArrayList<Person> persons=XMLReader.getInfo(file);
//遍历集合
for(Person person:persons)
System.out.println(person);
}
}
运行主类便可在控制台得到以下内容。