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文档相关推荐

  1. JAVA解析html文档,替换img图片路径成base64编码,并将文章存入数据库

    转载自  JAVA解析html文档,替换img图片路径成base64编码,并将文章存入数据库 开发环境:struts2+ spring + hibernate 数据库:oracle 需求:在HTML编 ...

  2. Java解析word文档,将word文档题库选择题导入

    学习目标: Java解析word文档,将word文档题库导入 学会word文档的解析,以及各种题型的导入 学习内容: 解析word文档 获取正文文件内容 doc和docx两种解析 解析word文档 p ...

  3. 【前端系列教程之HTML5】02_HTML文档结构

    一.HTML文件(文档)定义 试想:我们上网访问到底做了什么? 上一节提到URL问题,组成部分由HTTP,服务器地址,端口号,资源路径;这些东西组成了我们上网访问所谓的网址,其中有服务器地址和路径,从 ...

  4. java解析pdf文档(前面写了docx的解析所以也思考写一份pdf的解析)--PdfReader底层分析

    一.直接将前篇docx文档转成pdf文档用于测试 二.由于使用pdf文档所以需要引入一个新的依赖 <!--itextpdf是生成PDF文档的一个java类库--> <dependen ...

  5. java解析各种文档格式_java读取各类型的文件

    用到的几个包 bcmail-jdk14-132.jar/bcprov-jdk14-132.jar/checkstyle-all-4.2.jar/FontBox-0.1.0-dev.jar/lucene ...

  6. 使用aspose.word.for.java解析word文档图片并替换

    /** *需要import的包有如下 *import com.aspose.words.Document; *import com.aspose.words.DocumentBuilder; *imp ...

  7. Java解析Excel文档,2003和2007版本不兼容问题

    网上查了一下,对于这两个版本,有对应的api,稍不注意就会报: org.apache.poi.poifs.filesystem.OfficeXmlFileException:  The supplie ...

  8. java 转换xml格式的doc或docx文档为docx以及docx转PDF

    转换xml格式的doc或docx文档为docx import org.docx4j.Docx4J; import org.docx4j.openpackaging.packages.Wordproce ...

  9. 详解Java解析XML的四种方法

    http://developer.51cto.com  2009-03-31 13:12  cnlw1985  javaeye  我要评论(8) XML现在已经成为一种通用的数据交换格式,平台的无关性 ...

最新文章

  1. 定向输出命令_Linux系统管理-输入输出
  2. 【Paper】2021_Observer-based distributed consensus for multi-agent systems with directed networks and
  3. python startswith
  4. Linux账号和权限管理详解(超详细示例操作)!
  5. PIC32单片机harmony开发环境 - i2c例程和代码分析
  6. 2020下半年新机最新消息_提前剧透 2020 年下半年五大新机
  7. Pytorch机器学习/深度学习代码笔记
  8. 喜欢爱C/C++的人不要浮躁
  9. 【转载】关于RabbitMQ的高可用性
  10. 虚拟机Class文件结构笔记
  11. 实对称矩阵的奇异值等于特征值
  12. bootstrap 表单样式
  13. 01-Mybatis持久层框架快速入门(环境搭建、xml配置文件、注解)
  14. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十四:SD卡模块
  15. 利用python打乱xlsx表格
  16. 软件配置一套键鼠控制两台电脑
  17. Unity-Timeline制作动画(快来制作属于你的动画吧)
  18. 尼日利亚通货膨胀加剧和MogaFX外汇短缺加剧贬值投机
  19. 第43届ACM icpc亚洲区域赛焦作站感想
  20. 如何对word中不同页面设置不同页眉页脚

热门文章

  1. STM32 不断进入串口中断问题 解决方法
  2. Generic Access Profile (GAP)
  3. 区块链BaaS云服务(36)欧盟EBSI 区块链
  4. 93. 复原 IP 地址(回溯算法)
  5. optee中断处理的介绍(概念篇)
  6. 可信平台模块(TPM)概念介绍
  7. 64位传参利用方法LibcSearcher使用入门ROPgadget利用
  8. 时光不老,我们不散!
  9. 【Docker】记一次docker container ping domain 和 ping ipv6地址不通问题
  10. 1.21 Pattern类和Matcher类的使用