目录
XML(EXtensible Markup Language):是一种可扩展的标记语言
- "1.0" encoding="UTF-8" ?>
-
- <students>
-
- <student id="1">
- <name>张三name>
- <age>23age>
-
- <info>学生<老师info>
-
- <message> 学生,学生 < 老师]]>message>
- student>
-
-
- <student id="2">
- <name>李四name>
- <age>24age>
-
- student>
-
- students>
就是获取xml文件里的每一个值
DOM(Document Object Model)文档对象模型:就是把文档的各个组成部分看成对应的对象。
Document对象:整个xml文档
Element对象:所有标签
Attribute对象:所有属性
Text对象:所有文本内容(标签体:即标签里的内容)
(其中Element对象、Attribute对象、Text对象有一个共同的父类:Node对象)
当写完xml文件后,整个文档就会形成一个Document对象,开始获取里面的内容:先获取根标签students,再获取子标签student,再获取子标签内的属性id,标签name、age,标签体:即标签里的内容。

常见的解析工具有JAXP、JDOM、DOM4J、PULL
dom4j-1.6.1.jar包导入方式:


利用DOM4J解析,代码示例:
(1)student.xml文件
- "1.0" encoding="UTF-8" ?>
-
- <students>
-
- <student id="1">
- <name>张三name>
- <age>23age>
-
- <info>学生<老师info>
-
- <message> 学生,学生 < 老师]]>message>
- student>
-
-
- <student id="2">
- <name>李四name>
- <age>24age>
-
- student>
-
-
- students>
(2)Student类
- package myXMLDemo_01;
-
- public class Student {
- private String id;
- private String name;
- private int age;
-
- public Student() {
- }
-
- 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 Student(String id, String name, int age) {
- this.id = id;
- this.name = name;
- this.age = age;
- }
-
- @Override
- public String toString() {
- return "Student{" +
- "id='" + id + '\'' +
- ", name='" + name + '\'' +
- ", age=" + age +
- '}';
- }
- }
-
(3)DOM4J解析student.xml文件
- public class XmlParse {
- public static void main(String[] args) throws DocumentException {
- //获取一个解析器
- SAXReader saxReader = new SAXReader();
- //利用解析器把xml文件加载到内存中,并返回一个文档对象
- Document document = saxReader.read(new File("myXML\\xml\\ student.xml"));//文件路径最好不要手敲,直接复制粘贴
- //获取根标签
- Element rootElement = document.getRootElement();
- //通过根标签获取所有子标签
- //elements():可以获取调用者所有的子标签,会把所有的子标签都放到一个集合中
- //List list = rootElement.elements();如果elements()里面不传入参数,则获取所有标签
- //如果elements()里面传入标签名,则获取指定标签名的标签
- List
studentElements = rootElement.elements("student"); -
- //用来装学生对象的集合
- ArrayList
list = new ArrayList<>(); -
-
- //遍历集合得到每一个子标签
- for (Element element : studentElements) {
- //获取id这个属性
- Attribute attribute = element.attribute("id");
- //获取id的属性值
- String id = attribute.getValue();
-
- //获取name标签
- //element("标签名"):获取调用者指定的子标签
- Element nameElement = element.element("name");
- //获取这个标签的标签体内容
- String name = nameElement.getText();
-
- //获取age标签
- Element ageElement = element.element("age");
- String age = ageElement.getText();
-
-
- //System.out.println(id);
- //System.out.println(name);
- //System.out.println(age);
-
-
- Student s = new Student(id, name, Integer.parseInt(age));
- list.add(s);
-
- }
- //遍历操作
- for (Student student : list) {
- System.out.println(student);
- }
-
- }
-
- }