XML的解析方式和解析器
- 开发中比较常见的解析方式有两种,如下:
1、DOM:要求解析器把整个XML文档装载到内存,并解析成一个Document对象。
a) 优点:元素与元素之间保留结构关系,故可以进行增删改查操作。
b) 缺点:XML文档过大,可能出现内存溢出现象。
2、SAX:是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。并以事件驱动的方式进行具体解析,每执行一行,都将触发对应的事件。(了解)
a) 优点:处理速度快,可以处理大文件。
b) 缺点:只能读,逐行后将释放资源。
- 解析器:就是根据不同的解析方式提供的具体实现。有的解析器操作过于繁琐,为了方便开发人员,又提供易于操作的解析开发包。
- 常用的解析开发包:JAXP、JDom、jsoup、dom4j(常用)。
XML约束
常见的xml约束:DTD(dtd文件)、Schema(xsd文件)
用于约束xml文档,规定xml文档中元素的名称,子元素的名称及顺序,元素的属性等。
XML解析实现
1、导入jar包
dom4j-1.6.1.jar
2、准备需要解析的xml文件
3、编写解析代码
package com.xml.test;
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 TestXML {
@Test
public void testXML(){
try {
//1.创建解析器对象
SAXReader reader = new SAXReader();
//2.使用解析器加载web.xml文件得到document对象
Document document = reader.read("src/com/xml/web.xml");
// Document document = reader.read(new File("E:/eclipse/workspace/XML/src/com/xml/web.xml"));
//3.获取根元素节点
Element rootElement = document.getRootElement();
//4.获取根元素下的子元素
List<Element> elements = rootElement.elements();
//也可以根据元素名称获取单一子元素节点
// Element element = rootElement.element("servlet");
//5.遍历所有子元素
for (Element element : elements) {
//6.判断元素名称为servlet的元素
if(element.getName().equals("servlet")){
//7.根据元素名称获取servlet-name元素
Element element1 = element.element("servlet-name");
Element element2 = element.element("servlet-class");
//8.根据元素名称获取servlet-name的文本节点
System.out.println(element1.getText());
System.out.println(element2.getText());
}
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
}