一、概念
XML文件多用于信息的描述,所以在得到一个xml文档之后按照xml中的元素取出对应的信息就是xml的解析。其中一个xml文件 只能有一个根元素。
XML文件格式是一个树形结构。
Xml解析有两种方式:DOM解析、SAX解析。
二、DOM解析和SAX解析的区别
- DOM解析:适用于服务器端解析
一次性把 xml 的文件中 全部数据(1棵大树)读入到内存当中
1>非常浪费内存
2>性能高 支持数据的上下导航 可以定位任意的一次节点 - SAX解析:适用于移动端解析
1>帮你节省内存:一次只往内存中读入一个元素(标签)
-------问你 要不要处理 ?处理操作
------ 不处理 就把这个元素从内存中删除掉
2>性能效率低下
三、案例
结构如下图所示:
- Student.java
(需要添加set和get方法)
private String id;
private String name;
private String age;
- students.xml
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student id="1001">
<name>zhangsan</name>
<age>8</age>
</student>
<student id="1002">
<name>lisi</name>
<age>8</age>
</student>
<student id="1003">
<name>wangwu</name>
<age>8</age>
</student>
</students>
- Demo1.java
package com.gg.demo;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import com.gg.entity.Student;
public class Demo1 {
public static void main(String[] args) throws Exception {
//1.创建一个解析器工厂对象
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
//2.由这个工厂对象 创建一个解析器对象
DocumentBuilder builder=factory.newDocumentBuilder();
//3.解析器 去解析相应的XML文件
//所有的数据就是document
Document document=builder.parse("students.xml");
List<Student> students_list =new ArrayList<Student>();
NodeList students=document.getElementsByTagName("student");
for (int i = 0; i < students.getLength(); i++) {
Student student=new Student();
//id属性获取方法
//名字
//students.item(i).getAttributes().item(0).getNodeName();
//值
String id=students.item(i).getAttributes().item(0).getNodeValue();
student.setId(id);
//获取 student元素的子元素们
NodeList child_list=students.item(i).getChildNodes();
for (int j = 0; j < child_list.getLength(); j++) {
//获取student子元素的名称 只保留name age
String node_name=child_list.item(j).getNodeName();
if(node_name.equals("name")) {
String name=child_list.item(j).getTextContent();
student.setName(name);
}
if(node_name.equals("age")) {
String age=child_list.item(j).getTextContent();
student.setAge(age);
}
}
students_list.add(student);
}
//解析完成
for (Student student : students_list) {
System.out.println(student);
}
}
}
- 测试结果