XML解析
解析方式
开发中比较常见的解析方式有三种,如下:
- DOM:要求解析器把整个XML文档装载到内存,并解析成一个Document对象 a)优点:元素与元素之间保留结构关系,故可以进行增删改查操作。 b)缺点:XML文档过大,可能出现内存溢出
- SAX:是一种速度更快,更有效的方法。她逐行扫描文档,一边扫描一边解析。并以事件驱动的方式进行具体解析,每执行一行,都触发对应的事件。
a)优点:不会出现内存问题,可以处理大文件 b)缺点:只能读,不能回写。- PULL:Android内置的XML解析方式,类似SAX。
解析包
- JAXP:sun公司提供支持DOM和SAX开发包
- Dom4j: 比较简单的的解析开发包(常用),
- JDom:与Dom4j类似
- Jsoup:功能强大DOM方式的XML解析开发包,尤其对HTML解析更加方便
Dom4j的基本使用
DOM解析原理及结构模型
解析原理
XML DOM 和 HTML DOM一样,XML DOM
将整个XML文档加载到内存,生成一个DOM树,并获得一个Document对象,通过Document对象就可以对DOM进行操作
DOM中的核心概念就是节点,在XML文档中的元素、属性、文本,在DOM中都是节点!所有的节点都封装到了Document对象中。
常用的方法
创建解析器对象:
SAXReader sr = new SAXReader();
解析器读取文件方法:
Document doc = sr.read(String fileName);
Document的方法:
getRootElement() : 获取根元素
节点中的方法:
elements() : 获取当前元素的子元素
element(String name) : 根据元素名获取指定子元素(如果有多个就获取到第一个)
getName() : 获取元素的元素名
elementText(String name) : 获取指定子元素的文本值,参数是子元素名称
attributeValue(String name) : 获取当前元素下某个属性的值
getText() : 获取当前元素的文本值
Dom4J结合XPath解析XML
XPath 使用路径表达式来选取HTML\XML 文档中的元素节点或属性节点。节点是通过沿着路径 (path) 来选取的。XPath在解析HTML\XML文档方面提供了独树一帜的路径思想。
XPath使用步骤
步骤1:导入jar包(dom4j和jaxen-1.1-beta-6.jar)
步骤2:通过dom4j的SaxReader解析器对象,获取Document对象
步骤3: 利用Xpath提供的api,结合xpaht的语法完成选取XML文档元素节点进行解析操作。
document常用的api
document.selectSingleNode("xpath语法"); // 获得一个节点(标签,元素)
document.selectNodes("xpath语法"); // 获得多个节点(标签,元素)
XPath语法
XPath表达式,就是用于选取HTML文档中节点的表达式字符串。获取XML文档节点元素一共有如下4种XPath语法方式:
绝对路径表达式方式 例如: /元素/子元素/子子元素…
相对路径表达式方式 例如: 子元素/子子元素… 或者 ./子元素/子子元素…
全文搜索路径表达式方式 例如: //子元素//子子元素
谓语(条件筛选)方式 例如: //元素[@attr1=value]