解析XML
解析XML
就是从xml获取数据。
常见的解析思想
DOM
DOM(Document Object Model)文档对象模型:就是把文档的各个部分看做对应的对象。会把xml文件全部加载到内存,在内存中形成一个树状结构,再获取对应的值
- Document对象:整个xml文档
- Element对象:所有标签
- Attribute对象:所有属性,比如id
- Text对象:所有文本内容。如=“内容”
Element,Attribute和Text有一个共同父类Node对象
常见的解析工具
JAXP:SUN公司提供的一套xml的解析的API
JDOM:开源组织提供的一套XML的解析的API-jdom
DOM4J: 开源组织提供一套xml的解析API-dom4j, 全称Dom For Java
pull: 主要应用在Android手机端解析xml
案例
<?xml version="1.0" encoding="UTF-8" ?>
<!--注释的内容-->
<!--本xml文件永磊描述多个学生的信息-->
<studnet>
<!-- 第一个学生的信息-->
<student id="1">
<name>张三</name>
<age>23</age>
</student>
<!-- 第二个学生的信息-->
<student id="2">
<name>李四</name>
<age>24</age>
</student>
<aaa></aaa>
</studnet>
public class XmlParse {
public static void main(String[] args) throws DocumentException {
// 1. 获取文一个解析器对象
SAXReader saxReader = new SAXReader();
// 2. 利用解析器把xml文件加载到内存中,并返回一个文档对象
Document document = saxReader.read(new File("xml\\student.xml"));
// 3. 获取到根标签
Element rootElement = document.getRootElement();
// 4. 通过根标签获取student标签
// elements(): 可以获取调用者所有的标签,会把这些子标签放到一个集合中返回
// elements("标签名"):可以获取调用者所有的指定的子标签,会把这些子标签放到一个集合中返回
// List list = rootElement.elements();
List<Element> studentElements = rootElement.elements("student");
System.out.println(studentElements.size());
ArrayList<Student> list = new ArrayList<>();
// 5. 遍历集合,得到每一个student标签
for (Element element : studentElements) {
//element依次表示每一个student标签
// 获取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");
// 获取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);
}
}
}