zoukankan      html  css  js  c++  java
  • xml解析(4)

    本节要点:

    • 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也用它来读写配置文件。

  • 相关阅读:
    uva 11294 Wedding
    uvalive 4452 The Ministers’ Major Mess
    uvalive 3211 Now Or Later
    uvalive 3713 Astronauts
    uvalive 4288 Cat Vs. Dog
    uvalive 3276 The Great Wall Game
    uva 1411 Ants
    uva 11383 Golden Tiger Claw
    uva 11419 SAM I AM
    uvalive 3415 Guardian Of Decency
  • 原文地址:https://www.cnblogs.com/excellencesy/p/7884136.html
Copyright © 2011-2022 走看看