a) 优点:元素与元素之间保留结构关系,故可以进行增删改查操作。
b) 缺点:XML 文档过大,可能出现内存溢出显现。
2.SAX:是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。并以事件驱动的方式进行具体解析,每执行一行,都将触发对应的事件。(了解)
a) 优点:处理速度快,可以处理大文件
b) 缺点:只能读,逐行后将释放资源。
9.dom 解析原理
xml DOM 将整个 xml 文档加载到内存, 生成一个 DOM 树, 并获得一个 Document 对象, 通过 document 对象就可以进行 DOM 操作
a) read(…) 加载执行 xml 文档
a) getRootElement() 获得根元素
a) elements(…) 获得指定名称的所有子元素。可以不指定名称
b) element(…) 获得指定名称第一个子元素。可以不指定名称
c) getName() 获得当前元素的元素名
d) attributeValue(…) 获得指定属性名的属性值
e) elementText(…) 获得指定名称子元素的文本值
f) getText() 获得当前元素的文本内容
- 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 Dom4jDemo_01 {
- @Test
- public voiddemo01()throws DocumentException{
- //1 核心类SAXReader saxReader =new SAXReader();
- //2 获得Document(整个xml)Document document = saxReader.read("beans.xml");
- //3 获得根元素 beansElement rootElement = document.getRootElement();
- //4 所有子元素 beanList allBeanElement = rootElement.elements("bean");
- for (Element beanEle : allBeanElement) {
- //4.1 bean属性String id = beanEle.attributeValue("id");
- String className = beanEle.attributeValue("className");
- System.out.println("bean属性:" + id + " , " + className);
- //5 元素propertyList allPropElement = beanEle.elements("property");
- for (Element propEle : allPropElement) {
- String name = propEle.attributeValue("name");
- String value = propEle.attributeValue("value");
- System.out.println("property属性:" + name + " , " + value);
- }
- System.out.println("");
- }
- }
- }
被解析的 xml 文档
- <?xml version="1.0" encoding="UTF-8" ?>
- <beans>
- <bean id="beanId01" className="com.learn.domain.User">
- <property name="uid" value="u001">
- </property>
- <property name="username" value="jack">
- </property>
- </bean>
- <bean id="beanId02" className="com.learn.domain.Book">
- <property name="bid" value="b001">
- </property>
- <property name="title" value="标题">
- </property>
- </bean>
- </beans>
XML 基础
来源: http://www.bubuko.com/infodetail-2080117.html