- 新建一個(gè)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>
- 新增一個(gè)與xml匹配的pojo Student的類
@Data
public class Student {
private int sid;
private String name;
private String addr;
}
- 新增類實(shí)現(xiàn)對(duì)于給定的xml進(jìn)行解析
public class TestStudent {
public List<Student> parseXml(String xmlFile){
List<Student> list = new ArrayList<>();
// 1. 創(chuàng)建DocumentBuilderFactory對(duì)象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
// 2. 使用DocumentBuilderFactory對(duì)象的newDocumentBuilder()方法創(chuàng)建一個(gè)DocumentBuilder對(duì)象
DocumentBuilder builder = dbf.newDocumentBuilder();
// 3. 使用DocumentBuilder的parse(file)方法來(lái)對(duì)于指定文件來(lái)進(jìn)行解析,得到一個(gè)document對(duì)象
Document document = builder.parse(xmlFile);
// 4. 通過(guò)document對(duì)象的getElementsByTagName(tagName)來(lái)獲取指定標(biāo)簽的節(jié)點(diǎn)
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();
// 遍歷每個(gè)student節(jié)點(diǎn)中的每個(gè)sid炬灭,name荣赶,addr節(jié)點(diǎn)
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"));
}
}
- 運(yùn)行結(jié)果:
[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文件中新增一個(gè)依賴
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
- 新增一個(gè)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. 創(chuàng)建SAXReader對(duì)象
SAXReader reader = new SAXReader();
try {
// 2. 使用SAXReader對(duì)象讀取給定的xml文件得到一個(gè)Document對(duì)象
Document document = reader.read(xmlFile);
// 3. 通過(guò)Document對(duì)象的getRootElement()方法得到xml的跟節(jié)點(diǎn)元素
Element root = document.getRootElement();
//System.out.println(size());
// 4. 通過(guò)root("根元素")順藤摸瓜找到所有的子元素節(jié)點(diǎn)
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"));
}
}
- 運(yùn)行結(jié)果
[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)]