xml教程之java解析xml文档
1、java解析xml文件介绍
XML解析方式分为两种:DOM方式和SAX方式
DOM:Document Object Model,文档对象模型。这种方式是W3C推荐的处理XML的一种方式。
SAX:Simple API for XML。这种方式不是官方标准,属于开源社区XML-DEV,几乎所有的XML解析器都支持它。
XML解析开发包
JAXP:是SUN公司推出的解析标准实现。
Dom4J:是开源组织推出的解析开发包。(牛,大家都在用,包括SUN公司的一些技术的实现都在用)
JDom:是开源组织推出的解析开发包。
2、jaxp
JAXP:(Java API for XML Processing)开发包是JavaSE的一部分,它由以下几个包及其子包组成:
org.w3c.dom:提供DOM方式解析XML的标准接口
org.xml.sax:提供SAX方式解析XML的标准接口
javax.xml:提供了解析XML文档的类
javax.xml.parsers包中,定义了几个工厂类。我们可以通过调用这些工厂类,得到对XML文档进行解析的DOM和SAX解析器对象。
DocumentBuilderFactory
SAXParserFactory
调用 DocumentBuilderFactory.newInstance() 方法得到创建 DOM 解析器的工厂。调用工厂对象的 newDocumentBuilder方法得到 DOM 解析器对象。调用 DOM 解析器对象的 parse() 方法解析 XML 文档,得到代表整个文档的 Document 对象,进行可以利用DOM特性对整个XML文档进行操作了。
3、dom编程
DOM模型(document object model)
DOM解析器在解析XML文档时,会把文档中的所有元素,按照其出现的层次关系,解析成一个个Node对象(节点)。
在dom中,节点之间关系如下:
位于一个节点之上的节点是该节点的父节点(parent)
一个节点之下的节点是该节点的子节点(children)
同一层次,具有相同父节点的节点是兄弟节点(sibling)
一个节点的下一个层次的节点集合是节点后代(descendant)
父、祖父节点及所有位于节点上面的,都是节点的祖先(ancestor)
节点类型(下页ppt)
4、sax解析
在使用 DOM 解析 XML 文档时,需要读取整个 XML 文档,在内存中构架代表整个 DOM 树的Doucment对象,从而再对XML文档进行操作。此种情况下,如果 XML 文档特别大,就会消耗计算机的大量内存,并且容易导致内存溢出。
SAX解析允许在读取文档的时候,即对文档进行处理,而不必等到整个文档装载完才会文档进行操作。
SAX采用事件处理的方式解析XML文件,利用 SAX 解析 XML 文档,涉及两个部分:解析器和事件处理器:
解析器可以使用JAXP的API创建,创建出SAX解析器后,就可以指定解析器去解析某个XML文档。
解析器采用SAX方式在解析某个XML文档时,它只要解析到XML文档的一个组成部分,都会去调用事件处理器的一个方法,解析器在调用事件处理器的方法时,会把当前解析到的xml文件内容作为方法的参数传递给事件处理器。
事件处理器由程序员编写,程序员通过事件处理器中方法的参数,就可以很轻松地得到sax解析器解析到的数据,从而可以决定如何对数据进行处理。
使用SAXParserFactory创建SAX解析工厂
SAXParserFactory spf = SAXParserFactory.newInstance();
通过SAX解析工厂得到解析器对象
SAXParser sp = spf.newSAXParser();
通过解析器对象得到一个XML的读取器
XMLReader xmlReader = sp.getXMLReader();
设置读取器的事件处理器
xmlReader.setContentHandler(new BookParserHandler());
解析xml文件
xmlReader.parse("book.xml");
5、dom4j解析
Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。
Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。
使用Dom4j开发,需下载dom4j相应的jar文件。
DOM4j中,获得Document对象的方式有三种:1.读取XML文件,获得document对象 SAXReader reader = new SAXReader(); 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");
5.1、节点对象
1.获取文档的根节点.
Element root = document.getRootElement();
2.取得某个节点的子节点.
Element element=node.element(“书名");
3.取得节点的文字
String text=node.getText();
4.取得某节点下所有名为“member”的子节点,并进行遍历. List nodes = rootElm.elements(“member”); for (Iterator it = nodes.iterator(); it.hasNext()
xml教程之java解析xml文档相关推荐
- JAVA解析html文档,替换img图片路径成base64编码,并将文章存入数据库
转载自 JAVA解析html文档,替换img图片路径成base64编码,并将文章存入数据库 开发环境:struts2+ spring + hibernate 数据库:oracle 需求:在HTML编 ...
- Java解析word文档,将word文档题库选择题导入
学习目标: Java解析word文档,将word文档题库导入 学会word文档的解析,以及各种题型的导入 学习内容: 解析word文档 获取正文文件内容 doc和docx两种解析 解析word文档 p ...
- 【前端系列教程之HTML5】02_HTML文档结构
一.HTML文件(文档)定义 试想:我们上网访问到底做了什么? 上一节提到URL问题,组成部分由HTTP,服务器地址,端口号,资源路径;这些东西组成了我们上网访问所谓的网址,其中有服务器地址和路径,从 ...
- java解析pdf文档(前面写了docx的解析所以也思考写一份pdf的解析)--PdfReader底层分析
一.直接将前篇docx文档转成pdf文档用于测试 二.由于使用pdf文档所以需要引入一个新的依赖 <!--itextpdf是生成PDF文档的一个java类库--> <dependen ...
- java解析各种文档格式_java读取各类型的文件
用到的几个包 bcmail-jdk14-132.jar/bcprov-jdk14-132.jar/checkstyle-all-4.2.jar/FontBox-0.1.0-dev.jar/lucene ...
- 使用aspose.word.for.java解析word文档图片并替换
/** *需要import的包有如下 *import com.aspose.words.Document; *import com.aspose.words.DocumentBuilder; *imp ...
- Java解析Excel文档,2003和2007版本不兼容问题
网上查了一下,对于这两个版本,有对应的api,稍不注意就会报: org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplie ...
- java 转换xml格式的doc或docx文档为docx以及docx转PDF
转换xml格式的doc或docx文档为docx import org.docx4j.Docx4J; import org.docx4j.openpackaging.packages.Wordproce ...
- 详解Java解析XML的四种方法
http://developer.51cto.com 2009-03-31 13:12 cnlw1985 javaeye 我要评论(8) XML现在已经成为一种通用的数据交换格式,平台的无关性 ...
最新文章
- 定向输出命令_Linux系统管理-输入输出
- 【Paper】2021_Observer-based distributed consensus for multi-agent systems with directed networks and
- python startswith
- Linux账号和权限管理详解(超详细示例操作)!
- PIC32单片机harmony开发环境 - i2c例程和代码分析
- 2020下半年新机最新消息_提前剧透 2020 年下半年五大新机
- Pytorch机器学习/深度学习代码笔记
- 喜欢爱C/C++的人不要浮躁
- 【转载】关于RabbitMQ的高可用性
- 虚拟机Class文件结构笔记
- 实对称矩阵的奇异值等于特征值
- bootstrap 表单样式
- 01-Mybatis持久层框架快速入门(环境搭建、xml配置文件、注解)
- 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十四:SD卡模块
- 利用python打乱xlsx表格
- 软件配置一套键鼠控制两台电脑
- Unity-Timeline制作动画(快来制作属于你的动画吧)
- 尼日利亚通货膨胀加剧和MogaFX外汇短缺加剧贬值投机
- 第43届ACM icpc亚洲区域赛焦作站感想
- 如何对word中不同页面设置不同页眉页脚
热门文章
- STM32 不断进入串口中断问题 解决方法
- Generic Access Profile (GAP)
- 区块链BaaS云服务(36)欧盟EBSI 区块链
- 93. 复原 IP 地址(回溯算法)
- optee中断处理的介绍(概念篇)
- 可信平台模块(TPM)概念介绍
- 64位传参利用方法LibcSearcher使用入门ROPgadget利用
- 时光不老,我们不散!
- 【Docker】记一次docker container ping domain 和 ping ipv6地址不通问题
- 1.21 Pattern类和Matcher类的使用