xml解析(4)

摘要:
有两种处理xml的方法:DOM和SAX。调用工厂对象的newDocumentBuilder方法以获取DOM解析器对象。事件处理程序由程序员编写。程序员可以很容易地通过事件处理程序中的方法参数获得sax解析器解析的数据,这样他就可以决定如何处理数据。3DOM4J的XML解析JAXP是Sun提供的官方Java解析工具包,但许多其他企业和机构也开发了自己的XML解析工具,甚至比JAXP更好,例如DOM4J。

本节要点:

  • DOM解析方式
  • SAX解析方式
  • DOM4JXML的解析

XML用于将数据组织起来,形成文档用于存储和传输;

更多时候我们需要的是将xml中的数据解析出来,甚至是在程序中动态生成xml

操作xml的方式有两种DOMSAX

XML解析方式分为两种:DOM方式和SAX方式:

  • DOM:Document Object Model,文档对象模型。这种方式是W3C推荐的处理XML的一种方式。
  • SAX:Simple API for XML。这种方式不是官方标准,属于开源社区XML-DEV几乎所有的XML解析器都支持它。

XML解析开发包:

  • JAXP:是SUN公司推出的解析标准实现。 
  • Dom4J:是开源组织推出的解析开发包。(牛,大家都在用,包括SUN公司的一些技术的实现都在用)
  • JDom:是开源组织推出的解析开发包。

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解析器对象。

DOM解析方式

DOM(Document Object Model),“文档对象模型”早期是为了解决不用浏览器间数据兼容问题提出的解决方案,现在已经是W3C组织推荐的处理可扩展标志语言的标准编程接口。

W3C DOM 被分为 3 个不同的部分/级别(parts / levels):

  • 核心 DOM:用于任何结构化文档的标准模型
  • XML DOM:用于 XML 文档的标准模型
  • HTML DOM:用于 HTML 文档的标准模型

XML DOM 是:

  • 用于 XML 的标准对象模型
  • 用于 XML 的标准编程接口
  • 中立于平台和语言
  • W3C 的标准

SUN公司的JAXPJava API for XML Processing)提供了对dom的支持;其解析步骤为:

  • DocumentBuilderFactory.newInstance() 方法得到创建 DOM 解析器的工厂。, DocumentBuilderFactory是一个抽象工厂类,它不能直接实例化,但该类提供了一个newInstance方法 ,这个方法会根据本地平台默认安装的解析器,自动创建一个工厂的对象并返回。
  • 调用工厂对象的 newDocumentBuilder方法得到 DOM 解析器对象。
  • 调用 DOM 解析器对象的 parse() 方法解析 XML 文档,得到代表整个文档的 Document 对象,进行可以利用DOM特性对整个XML文档进行操作了。

具体代码如下:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 

DocumentBuilder db = dbf.newDocumentBuilder(); 

Document doc = db.parse("c:/xml/message.xml"); 

  • 获取xml节点

NodeList nl = doc.getElementsByTagName("message"); 

Node my_node = nl.item(0); 

String message = my_node.getFirstChild().getNodeValue(); 

  • 使用递归遍历xml文档

添加节点和属性

删除节点

注意:DOM的解析方式为将整个xml文档都加载入内存,因此对文档节点的添加、删除和修改操作都是只针对内存中的document对象,因此还需要使用Transformer类将修改真正写入到xml文件中!

SAX解析方式

由于dom采用的是将xml文档加载入内存进行处理的方式,如果xml文档较大,则会导致加载时间过长,效率降低的情况,因此,sun公司在JAXP中又添加了对SAX的支持;

SAX,全称Simple API for XML,既是一种接口,也是一种软件包。它是一种XML解析的替代方法。SAX不同于DOM解析,它逐行扫描文档,一边扫描一边解析。由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中,这对于大型文档的解析是个巨大优势。

SAX采用事件处理的方式解析XML文件,利用 SAX 解析 XML 文档,涉及两个部分“解析器”和“事件处理器”:

  • 解析器可以使用JAXPAPI创建,创建出SAX解析器后,就可以指定解析器去解析某个XML文档。
  • 解析器采用SAX方式在解析某个XML文档时,它只要解析到XML文档的一个组成部分,都会去调用事件处理器的一个方法,解析器在调用事件处理器的方法时,会把当前解析到的xml文件内容作为方法的参数传递给事件处理器。
  • 事件处理器由程序员编写,程序员通过事件处理器中方法的参数,就可以很轻松地得到sax解析器解析到的数据,从而可以决定如何对数据进行处理.

DOM4JXML的解析

JAXPsun公司官方提供的java解析工具包,但很多其他企业和机构也都开发了自己的xml解析工具,甚至比JAXP更加优秀,比如DOM4J

dom4j是一个JavaXML API,类似于jdom,用来读写XML文件的。dom4j是一个十分优秀的javaXML API,具有性能优异、功能强大和极其易使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面还可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,所以可以知道dom4j无论在哪个方面都是非常出色的。如今可以看到越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连SunJAXM也在用dom4j。这已经是必须使用的jar包, Hibernate也用它来读写配置文件。

免责声明:文章转载自《xml解析(4)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇IE和Firefox的兼容问题解决远程登陆Linux误按ctrl+s锁屏下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SQL Server索引语法 <第四篇>

从CREATE开始   通过显式的CREATE INDEX命令   在创建约束时作为隐含的对象 随约束创建的隐含索引 当向表中添加如下两种约束之一时,就会创建隐含索引。 主键约束(聚集索引) 唯一约束(唯一索引) 一、CREATE INDEX语法CREATE INDEX语句所做的事情与其听上去一样-用于在指定表或视图上基于声明的列创建索引: CRE...

C#探秘系列(七):XML文件操作(一)

XML 是可扩展标记语言(Extensible Markup Language)的缩写,其中的 标记(markup)是关键部分。你可以创建内容,然后使用限定标记标记它,从而使每个单词、短语或块成为可识别、可分类的信息。因而在C#中,对xml文件的操作尤为重要。本博客着力于在C#中如何对xml文件实施诸如创建、搜索、序列化和反序列化等操作,默认你已有一定的...

不难懂--------react笔记

  在jsx中不能使用class定义类名   因为class在js中是用来定义类的  定义类名的时候用className       label中的for必须写成htmlFor         ReactDOM.render:             参数1:需要渲染的dom元素或者组件         参数2:需要将渲染好的元素挂载在哪个挂载点身上...

【Python之路】特别篇--ECMA对象、DOM对象、BOM对象

ECMA对象从传统意义上来说,ECMAScript 并不真正具有类。事实上,除了说明不存在类,在 ECMA-262 中根本没有出现“类”这个词。 ECMAScript 定义了“对象定义”,逻辑上等价于其他程序设计语言中的类。 var o = new Object(); 对象的概念与分类: 由ECMAScript定义的本地对象.独立于宿主环境的 ECMAS...

【RF库XML测试】Get Elements

Name:Get ElementsSource:XML <test library>Arguments:[ source | xpath ]Returns a list of elements in the `source` matching the `xpath`. The `source` can be a path to an XML f...

基础概念总结(spring security、Quartz、JUnit测试)

1、Spring Security 的大体框架和原理 (1)在web.xml中配置过滤器,这样就可以控制这个项目的每个请求。 (2)在applicationContext.xml配置,其中http标签配置如何截用户请求,和配置用户认证(固定用户、使用数据库管理用户)。 (3)过滤器最上层为HttpSessionContextIntegrationFilt...