前言
现在市面上读取xml的方式有很多,但是我觉得这不需要掌握太多,大致了解一下,知道有哪些,然后掌握其中的一两种就差不多了。今天记录一下Dom4j读取xml文件这一种方式。
准备工作
1.创建项目
创建一个maven项目,输入dom4j、junit,导入相应依赖。junit是用来测试的。
有上面几个包就对了。
2.准备一个xml文件
这里我是自己写一个。大家可以网上找一个比较复杂一点的xml用作练习。
我是将这个xml放在src/main/resources/xml文件夹下。
<?xml version="1.0" encoding="UTF-8"?>
<all>
<one>
<name id="zs">张三</name>
<age>18</age>
<interest>
<inte>唱歌</inte>
<inte>跳舞</inte>
<inte>弹琴</inte>
</interest>
</one>
<one>
<name id="ls">李四</name>
<age>19</age>
<interest>
<inte>唱歌</inte>
<inte>敲代码</inte>
<inte>斗牛</inte>
</interest>
</one>
</all>
创建一个实体类
我们会将读取的xml内容放入一个实体中,因此需要创建一个实体类,我写了一个Student实体。
package entity;
import java.util.List;
public class Sdudent {
private String name;
private int age;
private List<String> interesting;
private String id;
public String getName() {
return name;
}
public int getAge() {
return age;
}
public List<String> getInteresting() {
return interesting;
}
public String getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setInteresting(List<String> interesting) {
this.interesting = interesting;
}
public void setId(String id) {
this.id = id;
}
@Override
public String toString() {
return "Sdudent [name=" + name + ", age=" + age + ", interesting=" + interesting + ", id=" + id + "]";
}
}
测试
好吧,比较懒就没有分开写,直接写在测试中,大家明白这个意思就行了。基本每一行都有注释,也就是一些API,照着写就完事了。
package dom4jReadXml;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;
import entity.Sdudent;
public class TestDemo {
@Test
public void test1() throws Exception{
//sax解析器
SAXReader r = new SAXReader();
//获取xml文件
File f = new File(new File("").getCanonicalPath()+"/src/main/resources/xml/stu.xml");
//将xml文件解析成一个docment对象
Document doc = r.read(f);
//获取对象的跟标签
Element root = doc.getRootElement();
//获取跟标签的子标签one
List<Element> onelist = root.elements();
//用于存储解析后的信息集合
List<Sdudent> sdudentList = new ArrayList<Sdudent>();
//遍历子标签
for(Element one:onelist){
//获取one标签的子标签
List<Element> stuList = one.elements();
//用于存储每一个one转换后的信息
Sdudent student = new Sdudent();
for(Element stu:stuList){
//获取标签的名字
String name = stu.getName();
//如果是name标签就将值放入对象中
if("name".equals(name)){
//获取标签的值(去除空格)
String value = stu.getTextTrim();
//将值放入实体对象中
student.setName(value);
//获取id属性
String id = stu.attributeValue("id");
student.setId(id);
}else if("age".equals(name)){
String value = stu.getTextTrim();
//因为实体中age是int类型,这里需要将String转为integer
student.setAge(Integer.parseInt(value));
}else if("interest".equals(name)){
//获取inte标签
List<Element> ilist = stu.elements();
//用于存储每一个兴趣
List<String> inlist = new ArrayList<String>();
for(Element i:ilist){
String na = i.getTextTrim();
inlist.add(na);
}
student.setInteresting(inlist);
}
}
//将每一个实体遍历完后放入集合中
sdudentList.add(student);
}
//打印集合
System.out.println(sdudentList);
}
}
结果
可以看出将已经将xml中的信息完全存入集合中了,正面读取成功!
[Sdudent [name=张三, age=18, interesting=[唱歌, 跳舞, 弹琴], id=zs], Sdudent [name=李四, age=19, interesting=[唱歌, 敲代码, 斗牛], id=ls]]
结束语
上面的内容已经可以做一些开发使用了,当然了dom4j并没有那么少的内容,深层次的我觉得等我们用到的时候再去了解就可以了。暂时就先记录到这把~