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表达式");
(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表达式");
相关文章推荐
- javaweb学习第七天:jaxp的dom和sax对xml的解析
- Java中四种XML解析技术对比(Dom、Sax、Dom4j JDom)
- XML解析【介绍、DOM、SAX详细说明、jaxp、dom4j、XPATH】
- XML解析【介绍、DOM、SAX详细说明、jaxp、dom4j、XPATH】
- XML解析【介绍、DOM、SAX详细说明、jaxp、dom4j、XPATH】
- xml解析技术介绍(dom4j,dom,jdom,sax)
- 我的Android进阶之旅------>Android中解析XML 技术详解---->SAX解析、DOM解析、PULL解析
- Java xml 操作(Dom4J修改xml   + xPath技术  + SAX解析 + XML约束)
- Android系列--DOM、SAX、Pull解析XML
- XML中DOM,Sax,JDom,Dom4j解析的区别
- java 解析xml的四种方式:sax,dom,dom4j,jdom
- 关于四种XML解析方案的比较:DOM,SAX,JDOM,DOM4J
- Android系列--DOM、SAX、Pull解析XML
- XML的四种解析器(dom_sax_jdom_dom4j)原理及性能比较[收藏]
- xml的解析方式——dom/sax、jdom、dom4j
- xml解析的技术(dom,sax)
- Java解析xml的主要解析器: SAX和DOM的选择(附上新方法--Pull解析)
- XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较
- 解析XML(SAX、DOM、PULL、dom4j)
- Java解析xml、解析xml四种方法、DOM、SAX、JDOM、DOM4j、XPath