2️⃣ 创建一个包,对照xml文件的内容完成对应Student类的编写。
package com.hxh.domxml; /** * @author 兴趣使然黄小黄 * @version 1.0 * 对照students.xml文件完成Student类 */ public class Student { private String sno; private String name; private int age; public Student() { } public Student(String sno, String name, int age) { this.sno = sno; this.name = name; this.age = age; } @Override public String toString() { return "Student{" + "sno='" + sno + '\'' + ", name='" + name + '\'' + ", age=" + age + '}'; } public String getSno() { return sno; } public String getName() { return name; } public int getAge() { return age; } public void setSno(String sno) { this.sno = sno; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } }
在该项目模块下,新建一个目录lib,将dom4j.jar包导入,并将包添加到类路径下。
4️⃣ 编写Dom4jTest类,用于实现解析,使用到了JUnit测试技术:
Dom4jTest类的完整代码如下,具体内容解释参考代码注释:
import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.junit.Test; import java.util.List; /** * @author 兴趣使然黄小黄 * @version 1.0 */ public class Dom4jTest { /** * 读取xml获取document对象的方法 * @throws DocumentException */ @Test public void test01() throws DocumentException { // 创建一个SaxReader输入流,去读取xml配置文件,生成Document对象 SAXReader saxReader = new SAXReader(); Document document = saxReader.read("src/students.xml"); //测试是否读取 System.out.println(document); } /** * 读取students.xml文件生成Student类 * @throws DocumentException */ @Test public void test02() throws DocumentException { //1.读取xml文件 SAXReader saxReader = new SAXReader(); //在Junit测试中,相对路径从模块名算起 Document document = saxReader.read("src/students.xml"); //2.通过文档对象获取根元素 Element rootElement = document.getRootElement(); //System.out.println(rootElement); //3.通过根元素获取student标签对象 //element()和elements()都是通过标签名查找子元素 List<Element> students = rootElement.elements("student"); //4.遍历,处理每个student标签转换为Student类 System.out.println("|\t\t学号\t\t|\t\t姓名\t\t|\t\t年龄\t\t|"); for (Element student : students) { //asXML将标签对象转换为标签字符串 //System.out.println(student.asXML()); Element nameElement = student.element("name"); //获取标签中的文本内容 String nameText = nameElement.getText(); //也可以直接通过student.elementText()方法一次性得到对应标签的文本内容 String ageText = student.elementText("age"); //获取标签内的属性 String snoText = student.attributeValue("sno"); //打印结果 System.out.println("\t"+ snoText + "\t\t\t" + nameText + "\t\t\t\t" + ageText + "\t\t"); } } }
test01的测试结果如下:
test02的测试结果如下: