layout: post
title: xml解析
subtitle: 用法
date: 2018-04-10
author: ZL
header-img: img/20180410.jpg
catalog: true
tags:
- Dom4j
- XML
xml的解析方式有三种:
DOM:先加载xml到内存,然后解析
- 优点:可以增删改查。
- 缺点:当xml过大时,可能内存溢出
SAX:一边扫描一边解析
- 优点:速度快,不会溢出
- 缺点:只能读,不能修改
PULL:Android内置的解析方式,类似SAX
常见的解析开发包
根据上面三种解析方式,具体到jar包有四个:
JAXP、JDOM、JSoup、Dom4j
最常用的是DOM4j
例子
首先导包:Dom4j-1.6.1.jar
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;
public class TestDom4j {
@Test
public void testReadWebXML() {
try {
// 1.获取解析器
SAXReader saxReader = new SAXReader();
// 2.获得document文档对象
Document doc = saxReader.read("src/cn/itheima/xml/schema/web.xml");
// 3.获取根元素
Element rootElement = doc.getRootElement();
// System.out.println(rootElement.getName());//获取根元素的名称
// System.out.println(rootElement.attributeValue("version"));//获取根元素中的属性值
// 4.获取根元素下的子元素
List<Element> childElements = rootElement.elements();
// 5.遍历子元素
for (Element element : childElements) {
//6.判断元素名称为servlet的元素
if ("servlet".equals(element.getName())) {
//7.获取servlet-name元素
Element servletName = element.element("servlet-name");
//8.获取servlet-class元素
Element servletClass = element.element("servlet-class");
System.out.println(servletName.getText());
System.out.println(servletClass.getText());
}
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://www.example.org/web-app_2_5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>xxxxxxxxxx</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
常用方法:
SaxReader对象
read()加载xml文档Document对象
getRootElement()获取根元素-
Element对象
- elements() 获得指定名称的所有子元素,可以不指定
- element() 获取指定名称的第一个子元素,可以不指定
- getName() 获取当前元素的元素名
- attributeValue() 获取指定属性名的属性值
- elementText() 获取指定名称子元素的文本值
- getText() 获取当前元素的文本内容