您的位置:首页 > 编程语言 > Java开发

JavaWeb系列之四(XML的解析技术(dom,sax)和解析器(jaxp,dom4j))

2015-05-27 19:22 501 查看
1.xml的解析

(1)xml有两种解析技术:dom技术,sax技术

1.1 dom解析

js里面的dom标记型文档

首先把标记型里面的每一部分都封装成对象(标签 属性 文本)

1.2 dom方式

缺点:文档过大,会造成内存溢出

优点:方便增删改查

1.3 sax解析过程

边读边解析,一行一行从上到下的读,

缺点:不能增删查改

优点:不会造成内存溢出

不同的公司针对dom和sax提供了不同的解析器jaxp,dom4j,jdom

2.jaxp的dom方式解析

jaxp是javase的一部分,在jdk里面的javax.xml.parsers

在这包里面有四个类,有两个类是使用sax方式解析

DocumentBuilder dom解析器,是抽象类,不能new得到实例

此类的实例:此类的实例可以从 DocumentBuilderFactory.newDocumentBuilder() 方法获取

DocumentBuilderFactory:这个类也是抽象类

这个类的实例 DocumentBuilderFactory.newInstance() 得到工厂的实例

再通过DocumentBuilderFactory.newInstance().newDocumentBuilder()得到DocumentBuilder的实例

DocumentBuilder里面的方法:

Document parse(String uri) : 得到整个文档

Document在org.w3c.dom包里面,父接口是 Node

createElement(String tagName) : 创建元素,返回Element

createTextNode(String data) : 创建文本 ,返回 Text

appendChild(Node newChild) :把标签添加到末尾

getElementsByTagName(String tagname) :根据标签名称得到标签,返NodeList

遍历 NodeList

getLength():得到集合的长度

item(int index) :得到每一个节点

getParentNode() :得到父节点
removeChild(Node oldChild) :删除节点

9.sax解析的原理
使用jaxp的下方式解析xml

SAXParser是一个抽象类,不能new一个对象要通过工厂来new
SAXParserFactory也是一个抽象类,通过SAXParserFactory.newInstance()得到实例,再通过.newSAXParser()获取到SAXParser的实例
parse方法里面传递解析器和时间处理器,相当于在绑定一个事件,当执行到这个方法自动触发事件
解析到开始标签时候,执行startElement,参数qName 返回标签名称
解析到文本标签时候,执行characters方法,使用string构造返回标签内容
解析到结束标签时候,执行endElement,参数qName,返回结束标签
例子:
得到所有name标签的值
定义一个成员变量 boolean
判断,如果解析到name标签时候,把布尔类型修改成true
判断如果true,打印文本内容
如果执行到结束name标签时候,把设置成false
得到第一个name标签的文本的值
定义一个成员变量 int idx = 1
每次解析完成之后name标签,需要在结束的位置把idx+1,
通过索引值得到某个标签
if(flag == true && idx==2) {}
flag值要是true同时idx的值是2,这两个条件同时满足 &&

10.dom4j的简介
dom4j是dom4组织开发针对xml解析器,dom4j不是javase的一部分。所以要想使用dom4j,需要引入dom4 jar包
引入jar包:创建文件夹folder,名称lib,把jar复制过去,右键build path—add to bulid path
操作步骤
new SAXReader();
执行方法read方法,得到Document
getRootElement :得到根节点
getParent():得到父节点
查询标签方法
element(String name); 参数是标签名称,查询第一个子标签
elements(QName qName);参数是标签名称,查询所有这个名称的子标签
elements(); 查询所有的子标签
dom4j解析,也会分配属性结构(dom方式和sax方式结合);
解析的过程,从上到下,一层一层的经行解析
13.使用XPath
3.实例
(1)第一种实例 / :/AA/CC AA下面的CC
(2)第二种实例 // ://BB 无论有多少层,都找到名称为BB
(3)第三种实例 * ://* 表示所有
(4)第四种实例 [1]:表示第一个标签
[lat()]:最后一个标签
(5)第五种使用://BBB[@id]: 表示名称上面是BBB的有id值的
(6)第六种使用://BBB[@id='b1']:
表示名称上面是BBB的有id值的,id值b1
在dom4j里面提供两个方法支持xpath

第一个方法:selectNodes("xpath表达式");

第二个方法:selectSingleNode("xpath表达式");


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: