`
Mysun
  • 浏览: 270484 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java xml处理概述

阅读更多
在Java中,对xml的处理模型主要有两种,一种DOM,一种是SAX。DOM是w3c提出的一个xml处理模型,需要在内存中保存整个XML文档的相关信息,好处是灵活性强,可以对XML文档的任何部分以任何顺序进行处理,缺点是耗内存。SAX是开源社区提出的一套API,与DOM不同,它不是规范,但是由于其使用的广泛性,可以把SAX看作是一个事实上的规范。SAX把XML文档当作一个流来处理,而不是把整个XML文档读到内存之后再处理,所以占用的内存非常少。但是SAX只支持一次性地读取,也就是说你无法回到之前处理过的XML节点,而且SAX只支持读取XML,而支持XML的写入。同时,SAX以事件的形式向客户端报告解析XML过程中遇到的各种合法的XML结构(如果标签,属性,内容等等),SAX以推(push)的方式来报告事件,所以客户端无法主动调用SAX的API来获取XML文档的内容,并且在SAX解析XML文档的过程中,调用者线程必须等待,知道整个解析过程完成为止。SAX 2.0和DOM level 2和3的都已经包含进JDK。
由于DOM和SAX都是API形式的规范,所以可以有很多不同的实现,为了支持不同的实现,DOM和SAX都提供了一些工厂方法来查找具体的实现者,同时在工厂方法中也规定了如何查找相应的实现者以及查找的顺序。

对于DOM来说,主要的工厂方法是org.w3c.dom.bootstrap.DOMImplementationRegistry.newInstance()方法,在JDK的文档中,是这样描述其实现的:
Obtain a new instance of a DOMImplementationRegistry. The DOMImplementationRegistry is initialized by the application or the implementation, depending on the context, by first checking the value of the Java system property org.w3c.dom.DOMImplementationSourceList and the the service provider whose contents are at "META_INF/services/org.w3c.dom.DOMImplementationSourceList" The value of this property is a white-space separated list of names of availables classes implementing the DOMImplementationSource interface. Each class listed in the class name list is instantiated and any exceptions encountered are thrown to the application.
从jdk的说明来看,首先会检查org.w3c.dom.DOMImplementataionSourceList这个系统属性,然后检查API实现者提供的jar包中的META_INF/service/org.w3c.dom.DOMImplementationSourceList文件,系统属性和文件中列出了实现了DOMImplementationSource接口的所有的实现类,系统属性和jar保重的文件(Java Service Provider规范)只取一个,优先使用系统属性。在得到了DOMImplementationRegistry实例之后,就可以调用它的getDOMImplementation(String features)的方法来获取DOMImplementation接口的实现类,DOMImplementation接口提供了方法用来创建Doument对象。

对于SAX来说,主要的工厂方法是org.xml.sax.helpers.XMLReaderFactory.createXMLReader()方法,在jdk中,其实现描述如下:
Attempt to create an XMLReader from system defaults. In environments which can support it, the name of the XMLReader class is determined by trying each these options in order, and using the first one which succeeds:
1.If the system property org.xml.sax.driver has a value, that is used as an XMLReader class name.
2.The JAR "Services API" is used to look for a class name in the META-INF/services/org.xml.sax.driver file in jarfiles available to the runtime.
3.SAX parser distributions are strongly encouraged to provide a default XMLReader class name that will take effect only when previous options (on this list) are not successful.
3.Finally, if ParserFactory.makeParser() can return a system default SAX1 parser, that parser is wrapped in a ParserAdapter. (This is a migration aid for SAX1 environments, where the org.xml.sax.parser system property will often be usable.)
In environments such as small embedded systems, which can not support that flexibility, other mechanisms to determine the default may be used.
Note that many Java environments allow system properties to be initialized on a command line. This means that in most cases setting a good value for that property ensures that calls to this method will succeed, except when security policies intervene. This will also maximize application portability to older SAX environments, with less robust implementations of this method.
过程基本和DOM工厂类的查找过程类似,只不过系统属性和文件名改成了org.xml.sax.driver。通过createXMLReader方法返回的XMLReader实例可以被用来对XML文档进行解析。

为了统一对DOM和SAX两种不同的XML模型的处理,Sun在其JDK中加入了一个JAXB规范。通过这个规范,使得替换DOM或者SAX的解析器不至于调整应用程序代码。通过JAXB创建DOM和SAX解析器的类在javax.xml.parsers中,具体使用方式可以查看JDK文档。另外,由于通过DOMImplementationRegistry、DOMImplementation接口只能创建Document而不能根据XML生成Document对象,所以,如果要通过现有的XML来生成Document对象只能通过JAXP的API或者DOM规范实现方提供的具体方法。

最后是Sun提出的Streaming API,Streaming API与SAX类似,也是通过流和事件的方式来处理XML文档。与SAX相比,主要有两方面的区别:
1.StAX(The Streaming API for XML)不仅支持读取XML文档,同时也支持创建XML文档
2.StAX以拉(pull)的方式提供XML文档的相关信息,也就是说,StAX对XML的解析过程由客户端程序控制。StAX提供的XMLStreamReader和XMLEventReader接口都提供了next()方法,使得客户端程序能够获取XML文档中的内容。关于XMLStreamReader和XMLEventReader两者的区别,参考:The Java Web Services Tutorial


StAX中的工厂类主要有三个,分别是XMLEventFactory、XMLInputFactory和XMLOutputFactory,都为与javax.xml.stream包下面。这些工厂类提供的工厂方法用来获取相应的XML读写类。具体的使用方式,可以查看JDK的文档。
分享到:
评论

相关推荐

    xmlbeans-3.0.1.jar【说明:JAVA、XML文档处理、数据绑定、数据解析、数据操作、Java对象转换】

    xmlbeans-3.0.1.jar是一个用于处理XML文档的Java库,它提供了强大的XML数据绑定和解析功能,使开发者能够更轻松地在Java应用中操作和处理XML数据。 【使用人群】 适用于Java开发者、数据处理专家和需要在Java应用中...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    JAVA_API1.6文档(中文)

    java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio.channels 定义了各种通道,这些通道表示到能够执行 I/O 操作的实体(如文件和套接字)的连接;定义了用于多路复用的、非阻塞 I/O 操作的...

    XML必知必会:Java、C#、Python多种语言解析XML文档

    第1章 XML概述 什么是XML、XML和HTML之间的区别 第2章 XML编辑工具 跨平台文本编辑工具、Windows平台文本编辑工具、Visual Studio Code工具和Altova XMLSpy工具 第3章 XML文档结构 声明、元素、属性、实体、CDATA...

    基于XML和JAVA的异构数据库集成中间件系统的研究和实现

    (1)XML概述 (2)XML的结构 (3)XML的语法 (4)为何使用XML 2.JAVA及其在数据库中的应用 (1)Java数据库基础JDBC API (2)Java数据库应用系统的实现 3.基于JAVA、XML的异构数据库集成应用 四、异构数据库集成中间件...

    Java 1.6 API 中文 New

    java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio.channels 定义了各种通道,这些通道表示到能够执行 I/O 操作的实体(如文件和套接字)的连接;定义了用于多路复用的、非阻塞 I/O 操作的...

    Java poi导入导出EXCEL工具类(兼容各版本)

    概述:Java poi导入导出EXCEL工具类(兼容各版本) 一、功能说明 允许同时导入或导出多个sheet,同一sheet可同时存在多个数据块,按数据块划分处理数据。 二、配置文件示例及详细说明 1、导入xml配置示例如下(见...

    XMLSPY 2010 企业版

     XML Schema/DTD 的更多情况,可以看看 IBM 中文站:XML Schema 于 XML DTD的技术比较于分析 +ZDNET CHINA 特稿: XML Schema用法 Java / C++ 代码生成器,这个可以从 XML Schemas 文档中生成Java/C++ 代码。...

    精通Java:JDK、数据库系统开发Web开发(实例代码)

    《精通Java:JDK、数据库系统开发Web开发》全书共分27章,内容涵盖了Java编程环境概述、基础语法、面向对象软件设计方法、线程、数据集合、网络编程、图形编程、多媒体编程以及Java Web开发。本书每一节的例子都是...

    Java Web整合开发王者归来:Java Web.part3

    第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为Struts框架篇,内容不仅包括Struts 1.x的内容,也包括Struts 2.x中的内容;第5篇为Hibernate框架...

    JavaAPI1.6中文chm文档 part1

    java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio.channels 定义了各种通道,这些通道表示到能够执行 I/O 操作的实体(如文件和套接字)的连接;定义了用于多路复用的、非阻塞 I/O 操作的...

    java api最新7.0

    java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio.channels 定义了各种通道,这些通道表示到能够执行 I/O 操作的实体(如文件和套接字)的连接;定义了用于多路复用的、非阻塞 I/O 操作的...

    xmljava系统源码-jsp-jstl-engine:javajsp&jstl模板引擎

    xml java系统源码 概述 Overview Ayada是一个完全脱离web环境的jsp&jstl引擎,几乎兼容jsp&jstl的全部功能。 语法完全同jsp语法,支持java脚本和jstl标签,对于使用jstl的人来说没有任何学习成本。 零配置,不需要...

    (超赞)JAVA精华之--深入JAVA API

    3.3 Java 语言的 XML 验证 API 3.4 hibernate的hello word 3.5 JavaMail(JAVA邮件服务)API详解 3.6 jxl.jar 包简介 3.7 Java与XML联合编程之SAX篇 3.8 Java与XML联合编程之DOM篇 4 其他 4.1 代码复用的规则 4.2 ...

    《Java Web程序设计任务教程》-章节习题.docx 第1章网页开发基础 2.Java Web概述等

    第二章Java Web概述 1.XML称为可扩展的标记性语言,格式良好的XML有且只能有【 】个根元素。 2.Tomcat服务器的默认端口号是【 】。 3.定义元素的属性时,有四种设置说明:#REQUIRED ,#IMPLIED,【 】和默认值。 第3...

    xml概述幻灯片加文档

    有做了一个XML的NIIT项目....原来的太幼稚...这个比较正式..比较完美..>!

Global site tag (gtag.js) - Google Analytics