- 新建一个xml文件stus.xml:
<students>
<student>
<sid>1</sid>
<name>AAA</name>
<addr>AA</addr>
</student>
<student>
<sid>2</sid>
<name>BBB</name>
<addr>BB</addr>
</student>
<student>
<sid>3</sid>
<name>CCC</name>
<addr>CC</addr>
</student>
<student>
<sid>4</sid>
<name>DDD</name>
<addr>DD</addr>
</student>
</students>
- 新增一个与xml匹配的pojo Student的类
@Data
public class Student {
private int sid;
private String name;
private String addr;
}
- 新增类实现对于给定的xml进行解析
public class TestStudent {
public List<Student> parseXml(String xmlFile){
List<Student> list = new ArrayList<>();
// 1. 创建DocumentBuilderFactory对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
// 2. 使用DocumentBuilderFactory对象的newDocumentBuilder()方法创建一个DocumentBuilder对象
DocumentBuilder builder = dbf.newDocumentBuilder();
// 3. 使用DocumentBuilder的parse(file)方法来对于指定文件来进行解析,得到一个document对象
Document document = builder.parse(xmlFile);
// 4. 通过document对象的getElementsByTagName(tagName)来获取指定标签的节点
NodeList nodeList = document.getElementsByTagName("student");
Student stu = null;
for (int i = 0; i < nodeList.getLength(); i++) {
stu = new Student();
Node node = nodeList.item(i);
NodeList nodes = node.getChildNodes();
// 遍历每个student节点中的每个sid,name,addr节点
for (int j = 0; j < nodes.getLength(); j++) {
Node item = nodes.item(j);
//System.out.println(item);
switch (item.getNodeName()){
case "sid":
String ssid = item.getTextContent();
int sid = ssid == null ? 0 : Integer.parseInt(ssid);
stu.setSid(sid);
break;
case "name":
String name = item.getTextContent();
stu.setName(name);
break;
case "addr":
String addr = item.getTextContent();
stu.setAddr(addr);
break;
}
}
list.add(stu);
}
//System.out.println(document);
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
@Test
public void testParse(){
System.out.println(parseXml("stus.xml"));
}
}
- 运行结果:
[Student(sid=1, name=AAA, addr=AA),
Student(sid=2, name=BBB, addr=BB),
Student(sid=3, name=CCC, addr=CC),
Student(sid=4, name=DDD, addr=DD)]
- 在pom文件中新增一个依赖
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
- 新增一个XML文件
<students>
<student>
<sid>1</sid>
<name>AAA</name>
<addr>AA</addr>
</student>
<student>
<sid>2</sid>
<name>BBB</name>
<addr>BB</addr>
</student>
<student>
<sid>3</sid>
<name>CCC</name>
<addr>CC</addr>
</student>
<student>
<sid>4</sid>
<name>DDD</name>
<addr>DD</addr>
</student>
</students>
- Student.java
@Data
public class Student {
private int sid;
private String name;
private String addr;
}
- TestStudentXMLDom4j.java
public class TestStudentXMLDom4j {
public List<Student> parseXml(String xmlFile){
List<Student> list = new ArrayList<>();
// 1. 创建SAXReader对象
SAXReader reader = new SAXReader();
try {
// 2. 使用SAXReader对象读取给定的xml文件得到一个Document对象
Document document = reader.read(xmlFile);
// 3. 通过Document对象的getRootElement()方法得到xml的跟节点元素
Element root = document.getRootElement();
//System.out.println(size());
// 4. 通过root("根元素")顺藤摸瓜找到所有的子元素节点
List<Element> elements = root.elements();
Student stu = null;
for (Element el : elements) {
List<Element> list2 = el.elements();
//System.out.println(list2);
stu = new Student();
for (Element e : list2) {
switch (e.getName()){
case "sid":
String ssid = e.getText();
int sid = ssid == null ? 0 : Integer.parseInt(ssid);
stu.setSid(sid);
break;
case "name":
String name = e.getText();
stu.setName(name);
break;
case "addr":
String addr = e.getText();
stu.setAddr(addr);
break;
}
}
list.add(stu);
}
} catch (DocumentException e) {
e.printStackTrace();
}
return list;
}
@Test
public void testParseXml(){
System.out.println(parseXml("stus.xml"));
}
}
- 运行结果
[Student(sid=1, name=AAA, addr=AA),
Student(sid=2, name=BBB, addr=BB),
Student(sid=3, name=CCC, addr=CC),
Student(sid=4, name=DDD, addr=DD)]