Dom和sax解析区别:
1.dom:(Document Object Model,文档对象模型) W3C组织推荐的一种处理方式
sax:(Simple API for XML)不是官方标准,但它是XML社区事实上的标准,几乎所有的XML解析
器都支持它。
2.使用Dom解析XML文档时,需要读取整个XML文档,在内存中架构架构代表整个DOM树的Document
对象,从而再对XML文档进行操作。在此种情况下,如果xml文档特别大,就会消耗计算机的大量
内存,并且容易导致内存溢出。
SAX解析允许在操作读取文档的时候,即对文档进行处理,而不必等到整个文档加载完才会对
文档进行操作。
-------------DOM4J---------------------------
1.Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开
发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提
供了比JDOM更好的灵活性。
2.Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很
多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。
3.使用Dom4j开发,需下载dom4j相应的jar文件。
DOM4j中,获得Document对象的方式有三种:
Xpath介绍:
1. 在xml文档中查找信息的语言
2. 通过元素和属性进行查找
3. 简化Dom4j查找节点的过程
4. /students/student
5. 从根元素开始逐层找,以”/”开头
6. //name
7. 直接获取所有name元素对象,以“//”开头
8. //student/*
9. 获取所有student元素的所有子元素对象
10. //student[1]或//student[last()]
11. 获取所有student元素的第一个或最后一个
12. //student[@id]
13. 获取所有带id属性的student元素对象
14. //student[@id=‘002']
15. 获取id等于002的student元素对象
l 获取所有符合条件的节点
• document.selectNodes(StringxpathExpression)
返回List集合
l 获取符合条件的单个节点
• document.selectSingleNode(StringxpathExpression)
• 返回一个Node对象。
• 如果符合条件的节点有多个,那么返回第一个。
------------SAX解析----------
SAX解析思想:解析器和事件处理器
1.解析器可以使用JAXP的API创建,创建出SAX解析器后,就可以指定解析器去解析某个XML文档
2.解析器采用SAX方式在解析某个XML文档时,它只要解析到XML文档的一个组成部分,都会调用
事件处理器的一个方法,解析器在调用事件处理器的方法时,就把当前解析到的xml的文件内容
作为参数,传递给事件处理器。
3.程序员编写事件处理器,通过事件处理器中方法的参数,得到解析的数据,对数据进行操作。
eg:
//1.创建解析工厂对象
SAXParserFactory factory=SAXParserFactory.newInstance();
//2.用工厂对象产生解析器对象
SAXParser parser= factory.newSAXParser();
//3.用解析器对象得到一个读取器对象
XMLReader xmlReader=parser.getXMLReader();
//4.给读取器设置一个处理器
xmlReader.setContentHandler(newMyContentHandler() );
//用解析器去读取book.xml
xmlReader.parse("src\\cn\\itcast\\day02\\book.xml");
其中MyContentHandle继承制DefaultHandler类,覆写需要的方法:
1.startDocument()
2.endDocument()
3.startElemnet()
4.endElment();
5.characters();
其中得到属性的方法:
attributes.getValue("方法名");
注:sax只能用于读取xml文件,无法作更新
------------Dom解析-----------------
主要的概念:
Node:xml文件所有对象的根接口 节点
Document:代表xml文件的整个内容的对象的接口
Element:代表某个元素或标签的对象的接口
Attr:代表某个元素的某个属性对象的接口
Text:代表标签体文本内容对象的接口
NodeList:代表包含多个Node接口对象的集合对象
可以对标签进行增(create)删(Delete)改(update)查(read)----CRUD
读:查看所有的数据 有条件的查询数据
写入:将一个User对象的信息保存为一个user标签
更新:创建一个有数据的user对象,根据其中的某个属性数据值去找对应的user标签,
将user对象的数据放到此user标签中
删除:删除所有user标签,有条件的删除:id=2删除对应的user标签
操作的基本步骤:
1.加载xml文件得到Document()
Document document = getDocument();
2.得到根标签(uers标签)
Element usersEle =document.getDocumentElement();
3.得到跟标签的所有子标签(得到Users标签的所有子标签,返回一个NodeList)
NodeList nodeList =usersEle.getElementsByTagName("user");
4.遍历List进行操作。
for(int i=0;i<nodeList.getLength();i++){}
常用的方法:文档解析器工厂---->解析器对象----->用解析器解析xml文件得到Document对象
private Document getDocument() throwsParserConfigurationException,
SAXException,IOException {
//创建一个文档解析器工厂对象
DocumentBuilderFactorybuilderFactory = DocumentBuilderFactory
.newInstance();
//根据工厂对象得到解析器对象password
DocumentBuilderbuilder = builderFactory.newDocumentBuilder();
//用解析器解析xml文件得到Document对象
Documentdocument = builder.parse(new File(
"H:\\workspace\\day01\\src\\cn\\itcast\\dom\
\users.xml"));
returndocument;
}
保存信息: 思路:转移器工厂对象---->通过工厂得到转移器---->通过转移器将Document的数
据转移到文件中去
private void saveDocument(Documentdocument)
throwsTransformerFactoryConfigurationError,
TransformerConfigurationException,TransformerException {
// 创建一个转移器工厂对象
TransformerFactory factory =TransformerFactory.newInstance();
// 通过工厂对象得到一个转移器
Transformer transformer =factory.newTransformer();
// 通过转移器将Document的数据转移到users.xml文件中去
DOMSource xmlSource = newDOMSource(document);
StreamResultoutputTarget = new StreamResult(new File(
"H:\\workspace\\day01\\src\\cn\\itcast\\dom\
\users.xml"));
transformer.transform(xmlSource,outputTarget);
}
Node appendChild(newChild) 将新的节点添加为最后一个子节点
insertBefore(newChild,refChild) 在某个子节点前插入一个新子节点
removeChild(oldChild) 删除指定的某个子节点
replaceChild(newChild,oldChild) 将指定的子节点替换成新的子节点
setTextContent(textContent) 设置文本内容(一般用在元素对象上)
getNodeName() 得到节点名称(一般用在元素对象上)
getParentNode() 得到父节点(一般用在元素对象上)
getTextContent() 得到文本内容(一般用在元素对象上)
getFirstChild() 得到第一个子节点
getLastChild() 得到最后一个子节点
getNextSibling() 得到下一个兄弟节点
getPreviousSibling() 得到上一个兄弟节点
Document
createElement(name) 创建一个指定名称的标签对象返回
getDocumentElement() 得到xml文件根标签
getElementById(id) 根据id属性值获取一个子标签对象
getElementsByTagName(name) 根据标签名得到所有对应的子标签
Element
setAttribute(name,value) 设置属性的名称和值
removeAttribute(attrName) 根据属性名删除对应的属性值
getAttribute(attrName) 根据属性名得到相应的属性值
getElementsByTagName(name) 根据标签名得到对应的子标签
getTagName() 得到标签名
Attr、Text 极少直接操作这两个接口的对象,一般通过Element对象来操作
NodeList getLength()得到包含的节点对象的个数 item(index)根据下标得到某个节点
转自:http://blog.csdn.net/wd916913/article/details/8088033
1.dom:(Document Object Model,文档对象模型) W3C组织推荐的一种处理方式
sax:(Simple API for XML)不是官方标准,但它是XML社区事实上的标准,几乎所有的XML解析
器都支持它。
2.使用Dom解析XML文档时,需要读取整个XML文档,在内存中架构架构代表整个DOM树的Document
对象,从而再对XML文档进行操作。在此种情况下,如果xml文档特别大,就会消耗计算机的大量
内存,并且容易导致内存溢出。
SAX解析允许在操作读取文档的时候,即对文档进行处理,而不必等到整个文档加载完才会对
文档进行操作。
-------------DOM4J---------------------------
1.Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开
发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提
供了比JDOM更好的灵活性。
2.Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很
多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。
3.使用Dom4j开发,需下载dom4j相应的jar文件。
DOM4j中,获得Document对象的方式有三种:
1.读取XML文件,获得document对象 SAXReader reader = newSAXReader(); Document document = reader.read(new File("input.xml“ )); 2.解析XML形式的文本,得到document对象. String text = "<members></members>"; Document document = DocumentHelper.parseText(text); 3.主动创建空document对象. Document document = DocumentHelper.createDocument(); //创建根节点 Element root =document.addElement( "members");
元素Element操作: //获取文档的元素. Element root = document.getRootElement(); //获取某个元素的指定名称的第一个子节点. Elementelement = element.element(“书名"); //获取某个元素的指定名称的所有子元素的集合 List list = element.elements(“书名”); //添加一个指定名称的子元素 Element childEle = parentEle.addElement(“书名”); //删除某个元素指定的子元素 parentEle.remove(childEle); 属性Attribute操作 //获取某个元素的指定名称的属性对象 Attribute attr = element.attribute(“id”); //获取某个元素的指定名称的属性值 String id = element.attributeValue(“id”); //给元素添加属性或更新其值 Attribute attr =element.addAttribute(“id”,”123”); //删除某个元素的指定属性 element.remove(attribute); 文本Text的操作 //获取某个元素的文本内容 String text = element.getText(); //给某个元素添加或更新文本内容 element.setText(“Tom”); 将文档写入XML文件. 1.文档中全为英文,不设置编码,直接写入的形式. XMLWriter writer = new XMLWriter(new FileWriter("output.xml")); writer.write(document); writer.close(); 2.文档中含有中文,设置编码格式写入的形式. OutputFormat format =OutputFormat.createPrettyPrint();// 指定XML编码 format.setEncoding( “utf-8"); XMLWriter writer = new XMLWriter(newFileWriter( "output.xml“ ),format); writer.write(document); writer.close();
Xpath介绍:
1. 在xml文档中查找信息的语言
2. 通过元素和属性进行查找
3. 简化Dom4j查找节点的过程
4. /students/student
5. 从根元素开始逐层找,以”/”开头
6. //name
7. 直接获取所有name元素对象,以“//”开头
8. //student/*
9. 获取所有student元素的所有子元素对象
10. //student[1]或//student[last()]
11. 获取所有student元素的第一个或最后一个
12. //student[@id]
13. 获取所有带id属性的student元素对象
14. //student[@id=‘002']
15. 获取id等于002的student元素对象
l 获取所有符合条件的节点
• document.selectNodes(StringxpathExpression)
返回List集合
l 获取符合条件的单个节点
• document.selectSingleNode(StringxpathExpression)
• 返回一个Node对象。
• 如果符合条件的节点有多个,那么返回第一个。
Eg: publicvoid testGetPriceByName() throws Exception { // 加载xml文件 Document document = getDocument(); String xpath="//书[@书名='JavaScript网页开发']/售价"; List<Node> nodes= document.selectNodes(xpath); for(Node node:nodes){ if(node.getName().equals("售价")){ System.out.println(node.getText());} } }
------------SAX解析----------
SAX解析思想:解析器和事件处理器
1.解析器可以使用JAXP的API创建,创建出SAX解析器后,就可以指定解析器去解析某个XML文档
2.解析器采用SAX方式在解析某个XML文档时,它只要解析到XML文档的一个组成部分,都会调用
事件处理器的一个方法,解析器在调用事件处理器的方法时,就把当前解析到的xml的文件内容
作为参数,传递给事件处理器。
3.程序员编写事件处理器,通过事件处理器中方法的参数,得到解析的数据,对数据进行操作。
eg:
//1.创建解析工厂对象
SAXParserFactory factory=SAXParserFactory.newInstance();
//2.用工厂对象产生解析器对象
SAXParser parser= factory.newSAXParser();
//3.用解析器对象得到一个读取器对象
XMLReader xmlReader=parser.getXMLReader();
//4.给读取器设置一个处理器
xmlReader.setContentHandler(newMyContentHandler() );
//用解析器去读取book.xml
xmlReader.parse("src\\cn\\itcast\\day02\\book.xml");
其中MyContentHandle继承制DefaultHandler类,覆写需要的方法:
1.startDocument()
2.endDocument()
3.startElemnet()
4.endElment();
5.characters();
其中得到属性的方法:
attributes.getValue("方法名");
注:sax只能用于读取xml文件,无法作更新
------------Dom解析-----------------
主要的概念:
Node:xml文件所有对象的根接口 节点
Document:代表xml文件的整个内容的对象的接口
Element:代表某个元素或标签的对象的接口
Attr:代表某个元素的某个属性对象的接口
Text:代表标签体文本内容对象的接口
NodeList:代表包含多个Node接口对象的集合对象
可以对标签进行增(create)删(Delete)改(update)查(read)----CRUD
读:查看所有的数据 有条件的查询数据
写入:将一个User对象的信息保存为一个user标签
更新:创建一个有数据的user对象,根据其中的某个属性数据值去找对应的user标签,
将user对象的数据放到此user标签中
删除:删除所有user标签,有条件的删除:id=2删除对应的user标签
操作的基本步骤:
1.加载xml文件得到Document()
Document document = getDocument();
2.得到根标签(uers标签)
Element usersEle =document.getDocumentElement();
3.得到跟标签的所有子标签(得到Users标签的所有子标签,返回一个NodeList)
NodeList nodeList =usersEle.getElementsByTagName("user");
4.遍历List进行操作。
for(int i=0;i<nodeList.getLength();i++){}
常用的方法:文档解析器工厂---->解析器对象----->用解析器解析xml文件得到Document对象
private Document getDocument() throwsParserConfigurationException,
SAXException,IOException {
//创建一个文档解析器工厂对象
DocumentBuilderFactorybuilderFactory = DocumentBuilderFactory
.newInstance();
//根据工厂对象得到解析器对象password
DocumentBuilderbuilder = builderFactory.newDocumentBuilder();
//用解析器解析xml文件得到Document对象
Documentdocument = builder.parse(new File(
"H:\\workspace\\day01\\src\\cn\\itcast\\dom\
\users.xml"));
returndocument;
}
保存信息: 思路:转移器工厂对象---->通过工厂得到转移器---->通过转移器将Document的数
据转移到文件中去
private void saveDocument(Documentdocument)
throwsTransformerFactoryConfigurationError,
TransformerConfigurationException,TransformerException {
// 创建一个转移器工厂对象
TransformerFactory factory =TransformerFactory.newInstance();
// 通过工厂对象得到一个转移器
Transformer transformer =factory.newTransformer();
// 通过转移器将Document的数据转移到users.xml文件中去
DOMSource xmlSource = newDOMSource(document);
StreamResultoutputTarget = new StreamResult(new File(
"H:\\workspace\\day01\\src\\cn\\itcast\\dom\
\users.xml"));
transformer.transform(xmlSource,outputTarget);
}
Node appendChild(newChild) 将新的节点添加为最后一个子节点
insertBefore(newChild,refChild) 在某个子节点前插入一个新子节点
removeChild(oldChild) 删除指定的某个子节点
replaceChild(newChild,oldChild) 将指定的子节点替换成新的子节点
setTextContent(textContent) 设置文本内容(一般用在元素对象上)
getNodeName() 得到节点名称(一般用在元素对象上)
getParentNode() 得到父节点(一般用在元素对象上)
getTextContent() 得到文本内容(一般用在元素对象上)
getFirstChild() 得到第一个子节点
getLastChild() 得到最后一个子节点
getNextSibling() 得到下一个兄弟节点
getPreviousSibling() 得到上一个兄弟节点
Document
createElement(name) 创建一个指定名称的标签对象返回
getDocumentElement() 得到xml文件根标签
getElementById(id) 根据id属性值获取一个子标签对象
getElementsByTagName(name) 根据标签名得到所有对应的子标签
Element
setAttribute(name,value) 设置属性的名称和值
removeAttribute(attrName) 根据属性名删除对应的属性值
getAttribute(attrName) 根据属性名得到相应的属性值
getElementsByTagName(name) 根据标签名得到对应的子标签
getTagName() 得到标签名
Attr、Text 极少直接操作这两个接口的对象,一般通过Element对象来操作
NodeList getLength()得到包含的节点对象的个数 item(index)根据下标得到某个节点
转自:http://blog.csdn.net/wd916913/article/details/8088033
发表评论
-
java验证字符串中是否包含数字,对数字的操作
2016-03-15 11:01 9540在javascript中有一个方法 ... -
jdk7 Collections.sort()方法报非法参数异常
2016-03-03 18:57 12111JDK7的Comparison method violates ... -
log4j.properties配置详解
2016-01-18 16:50 1329Log4J的配置文件(Configuration File)就 ... -
Java 日期时间 Date类型,long类型,String类型表现形式的转换
2015-12-24 17:35 3316Java 日期时间 Date类型,long类型,String类 ... -
Java多线程-工具篇-BlockingQueue
2015-11-24 16:13 1016Java多线程-工具篇-Block ... -
Java 实例 - 队列(Queue)入门用法
2015-11-23 17:27 2035队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表 ... -
Java中序列化的serialVersionUID作用
2015-11-13 14:13 4884Java序列化是将一个对象 ... -
java的序列化和反序列化
2015-10-27 19:48 1150Java基础学习总结——Jav ... -
java中volatile关键字的含义
2015-08-12 20:10 791java中volatile关键字的含 ... -
Java读写文件中文乱码问题
2015-07-20 17:49 3006问题:在用Java程序进行读写含中文的txt文件时,经常会出现 ... -
String类中split方法的使用
2015-07-02 14:39 1031String类中split方法的使用 split 方法:将一个 ... -
PreparedStatement防止SQL注入
2015-04-11 16:27 2841一条效率差的sql语句,足以毁掉整个应用. Stateme ... -
Session的生命周期
2015-04-11 11:58 966我们已经知道,Session是在用户第一次访问网 ... -
JAVA多线程和并发基础
2015-04-11 11:58 806JAVA多线程和并发基础 ... -
Java中equals()与hashCode()方法详解
2015-04-08 16:19 924一.equals()方法详解 equals()方法在o ... -
json数据后台处理
2015-03-30 16:05 837JAVA解析JSON问题,怎么解析,急!! String j ... -
java判断list为空
2015-01-30 15:25 4010java判断list为空 if(null == list | ... -
httpclient使用实践
2015-01-09 17:09 1384httpclient是什么这里不再详述(可参考最下方网址);直 ... -
java反射获取属性和方法
2015-01-09 11:12 3144反射的应用一般是要用到某些特殊类的属性和方法,无论是一般方法还 ... -
java中int 转String位数不够前面补零
2015-01-08 21:53 20043java 中int 转String位数不够前面补零 Stri ...
相关推荐
总结起来,dom4j库提供了DOM和SAX两种XML解析方式,而SAX解析在处理大文件时具有性能优势。通过注册事件处理器,开发者可以在解析过程中动态响应XML结构,实现灵活的数据处理。在实际工作中,选择合适的解析方法取决...
常见的 XML 解析器有 DOM、SAX、JDOM 和 DOM4J 等。每种解析器都有其特点和优缺,选择合适的解析器对应用程序的性能和开发效率有很大影响。 1. DOM 解析器 DOM(Document Object Model)是 W3C 官方标准,用于表示...
使用DOM4J解析XML,首先需要导入DOM4J库,然后使用`DocumentHelper`类的`parseText()`或`parse()`方法。比如: ```java Document doc = DocumentHelper.parseText(new File("testxml.xml").getText()); Element root...
为了处理XML文档,有三种主要的解析方式:DOM、SAX和DOM4J。每种方法都有其特点和适用场景,下面将详细介绍这三种解析方式。 1. DOM(Document Object Model) DOM解析器将整个XML文档加载到内存中,构建一个树形...
### DOM4J解析XML详解 #### 一、DOM4J简介与特性 DOM4J是一个由dom4j.org开发的开源XML解析包,专为Java平台设计,它不仅支持DOM、SAX和JAXP标准,还巧妙地融入了Java集合框架,使其成为Java开发者在处理XML数据时...
在Java中,解析XML有多种方法,主要包括DOM、SAX和DOM4J。下面将详细介绍这三种解析方式及其对应的jar包。 1. DOM (Document Object Model) DOM是一种基于树形结构的XML解析方法,它将整个XML文档加载到内存中,...
6. **StAX(Streaming API for XML)支持**:DOM4J也支持StAX解析器,这种解析方式结合了SAX的高效和DOM的易用性,可以在处理大型XML文件时节省内存。 7. **与JAXB集成**:DOM4J可以与Java Architecture for XML ...
DOM4J库是Java中广泛使用的XML处理工具,它提供了SAX解析XML的功能。SAX(Simple API for XML)是一种事件驱动的解析器,适用于处理大型XML文档,因为它不需要将整个文档加载到内存中,因此在处理大文件时比DOM...
本教程将深入探讨XML DOM4J解析的相关知识点。 一、DOM4J基本概念 DOM4J是一种灵活的Java API,其设计目标是简化XML处理,提供高效且易于使用的API。与标准的DOM(Document Object Model)相比,DOM4J更轻量级,...
对于xml&dom&sax&dom4j 文件解析的代码总结
以下是一个DOM4J解析XML的简单示例: ```java import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; public class Dom4jExample { public static void main(String[] args) {...
### XML解析技术DOM4J解析 #### DOM4J解析概览 DOM4J是一种高性能、功能强大且极其易于使用的Java XML API,它最初是作为JDOM的一个智能分支发展起来的,自2000年下半年开始持续开发。DOM4J不仅在功能上超越了基本...
**DOM4J——XML解析库详解** XML(eXtensible Markup Language)作为一种标记语言,广泛应用于数据交换、配置文件和文档存储等领域。在Java环境中,解析XML文档时,我们通常会遇到各种库,其中DOM4J是一个非常流行...
2. DOM4J解析: DOM4J是Java中一个灵活且功能强大的XML处理库,它是DOM的一个扩展,提供了更高级的功能和更好的性能。DOM4J不仅支持DOM,还支持SAX和StAX解析器。它简化了XML的读写操作,比如使用`Document`、`...
为了处理XML文档,Java提供了多种API,其中最常用的包括DOM、SAX、DOM4J和JDOM。以下是对这些方法的详细介绍: 1. DOM(Document Object Model) DOM是一种树形结构的API,它将整个XML文档加载到内存中,形成一个...
本文将详细介绍生成和解析XML的四种主要方法:DOM、DOM4J、SAX和JDOM。 1. DOM(Document Object Model) DOM是W3C组织推荐的一种解析XML的标准方式。它将XML文档视为一个树形结构,每个节点代表XML文档的一部分。...
DOM4J的名字来源于Document Object Model (DOM) 和 Java的结合,但它并不局限于DOM模型,同时也支持SAX和STAX解析器,因此在处理大型XML文件时,它能提供比纯DOM更好的性能。 XML(eXtensible Markup Language)是...
5. **事件驱动解析(SAX)**:除了传统的DOM解析外,DOM4J还支持SAX解析器,这种解析方式适用于处理大型XML文件,因为它不需要一次性加载整个文档到内存。 6. **Namespace支持**:DOM4J提供了对XML命名空间的全面...
使用DOM4J解析XML** 解析XML文件时,DOM4J提供了两种主要的方式:DOM阅读器和SAX阅读器。 - **DOM阅读器**:首先,通过`DocumentFactory.createDocument()`方法创建一个`Document`对象,然后使用`read()`方法读取...
- **dom4j+jaxen操作XML**:首先使用dom4j解析XML,然后通过jaxen创建XPath对象并执行查询。查询结果可以是元素、属性或其他XML节点,根据需要进行进一步处理。 例如,以下代码展示了如何使用dom4j和jaxen解析XML...