`
cloudtech
  • 浏览: 4606418 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

Java里的XML概念整理

 
阅读更多

1. XML语法解析方式

XML解析方法是理论知识,不止在java里是这样,换到其他语言下也是一样的。目前有三种:

A. DOM(Document Object Model): DOM方法一次把XML的所有内容读入内存,按照xml的内容里面的node,attribute等生成一个树状结构。这就是一个对象模型了,完了我们就可以对这个树状结构进行操作。DOM的特点是编程简单,明了;缺点是要一次性读入所有内容

B. SAX(Simple API for XML): SAX是一种基于事件的解析方式,通过回调函数嵌入自己的代码。在解析前要定义好回调函数,在SAX开始解析后,一旦产生事件就会调用回调函数,比如一旦发现一个子节点就调用一个回调函数。SAX不像DOM一样有清晰的父子,树结构关系,要在回调函数里自己维护node之间的关系。因为SAX不需要维护树,所以它不要一次读入所有XML,但是编程难度比DOM大。

C. StAX(Streaming API for XML): StAX是一种新的XML解析方式,它更像SAX,也是基于事件的,也不需要一次读入所有内容。和SAX的不同在于,SAX的事件是push的,而StAX是pull的。SAX通过让解析器调用回调函数把事件推送出来,而StAX则有一个主动去pull事件的接口,当调用pull的接口时,解析器去读取下一部分xml并产生事件返回。StAX相对SAX的好处是可以主动控制解析过程,甚至提前中止解析。

2. XML语法解析器

上面说的都是理论,只是解析的方法,还是需要工具安装上面的方法来真正的去解析XML,这就是XML解析器。

常看到的语法解析器有两种,Xerces和Crimson。 前者最早是IBM开发的,后者是SUN开发的,现在都是开源的。Crimson的效率比Xerces差很多,所以其实现在基本都是用Xerces了。

3. JAXP(Java API for XML Processing)

SUN在做Java的时候喜欢预留接口,像JDBC,Script等等。 因为有很多XML语法解析器,大家的接口是不一样的。为了简化开发,也方便替换解析器实现,SUN定义了JAXP接口。通常XML语法解析器都会实现这些接口,这样就保证了在不改变代码的情况下更改解析器实现。 怎么替换一个解析器呢? JAXP的DocumentBuilderFactory和SAXParserFactory类都有一个newInstance方法,他们都是类似的内容,以SAX为例:

传入了两个参数,看注释,第一个是一个属性名字,第二个是一个类名字。FactoryFinder.find实现的功能就是,先按照属性去java程序的参数里找,如果找到了参数就按参数里指定的类名去构造解析器,如果没有就按照第二个参数里指定的类名字去构造解析器。 所以只要在启动程序的时候加上参数 -Davax.xml.parsers.SAXParserFactory=指定的类名 就可以替换解析器了。

4. DOM接口

按照JAXP的接口,DOM解析出来的对象是一个org.w3c.dom.Document实例,人们发现w3c的接口非常难用, 所以就产生了封装org.w3c.dom.Document的想法,于是就出现了JDOM和DOM4J,他们都是一样的目的,只是接口不一样。 最终DOM4J比JDOM在效率上领先。

5. JAXB(Java Architecture for XML Binding)

关系数据库通过OR-mapping实现表内数据和java对象的转换,XML也有方式实现和java对象的转换,叫做oxm(Object XML Mapping).

JAXB就是一个oxm的规范,又是SUN制定的。和JAXP一样,它也是定义好一些接口让厂商去实现,同时还定义了一些功能规范。和JAXP一样,JAXB也定义了方法把实现的类名传进去,随着时代的发展,它比JAXP多了两种方式,所以共三种方式。

A. 在要mapping的java类的同一个包内加入一个文件 jaxb.properties,在文件里定义javax.xml.bind.context.factory属性指定类名。

B. 像JAXP一样,通过加启动参数 -Djavax.xml.bind.JAXBContext 来指定类名

C. 通过在META-INF/services/目录下加一个名为javax.xml.bind.JAXBContext 的文件,文件里指定实现类名。

因为代码量原因,我就不贴了,可以查看Context源码的find方法。其中第三种方式在java 1.6里被抽象出一个java的新功能,叫ServiceRegistry,可以去查看API文档了解详情。

关键字:JAVA XMLDOM SAX StAX Xerces Crimson JAXP JDOM DOM4J JAXB

分享到:
评论

相关推荐

    XML高级编程

    首先也是最重要的,本书覆盖了万维网协会(W3C)整理编撰的XML的全部基础内容。W3C是以正统方式发明XML的标准主体并在不断开发XML的规范。虽然有越来越多的XML社团在不断涌现并提出崭新的超出W3C控制之外的与XML相关...

    java框架知识点汇总(反射,XML,设计模式,Redis缓存数据库)

    整理了框架底层是按技术(包括反射,XML,设计模式)及Redis缓存数据库技术。 Java 反射机制是在运行状态中,对于任意一个类,都能够获得这个类的所有属性和方法,对于任意一个对象都能够调用它的任意一个属性和方法...

    JAVA核心知识点整理(有效)

    标记整理算法(Mark-Compact).................................................................................................. 28 分代收集算法 ..............................................................

    JAVA面试题最全集

    35.java除了8种基本类型外,在虚拟机里还有哪一种,有什么作用? 36.除了使用new关键字创建对象意外,试列举另外三种以上创建实例的方式? 37.classloader中,JDK的API、Classpath中的同web-inf中的class加载方式有...

    Java学习笔记-个人整理的

    {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{subsection.1.3.1} {1.4}数据类型}{23}{section.1.4} {...

    xmljava系统源码-AspnetCoreHome:Asp.netCore官方合集,方便一次性Clone,并整理和分享了资料,(码云)国内地

    xml java系统源码 简介 这个仓库是Asp.net Core官网的一个合集,方便一次性Clone; 我们比任何时候更接近真相(源码) 工具安装 快速入门 net core有区别于以前的开发模式,提供了类似NodeJs的开发体验,建议的开发模式 ...

    tomcat之目录映射_动力节点Java学院整理

    web应用的概念:一个web应用包含了许多我们做好的web资源,里面或许包括了多个静态web资源和动态web资源,如html、css、js文件,jsp文件,Java程序,jar包和配置文件等等,如我在Tomcat的【webapps】目录下的自定义...

    人事管理系统程序设计语言

     1、ActionScript APL、 A+ J语言 Ada 汇编语言 AWK Basic Fortran VBScript Brainfuck C语言 C++ C# Clipper COBOL dBase PASCAL Delphi Forth FoxPro F# Fava IDL Java JavaScript J# LISP Lua LOGO Modula Nuva ...

    ActionScript 3.0 API文档及Flex开发详解电子书

    对C语言、Java语言/JavaEE系统、Ruby on Rails、Flex、Ajax等领域都有深入的研究:国内第一个Flex企业级上线项目核心开发者,属于国内最早一批应用Flex进行企业级开发的软件工程师;国内第一批Ruly on Rails架构的...

    asp.net知识库

    技术基础 New Folder 多样式星期名字转换 [Design, C#] .NET关于string转换的一个小Bug Regular Expressions 完整的在.net后台执行javascript脚本...Serialize Your Deck with Positron [XML Serialization, XSD, C#]...

    [Visual.Basic.2010.入门经典(第6版)].Thearon.Willi等.扫描版(1/2)

    2.1.3 .NET与Java 有些类似 .......... 21 2.1.4 现在所处的阶段 .................... 22 2.2 为Windows 编写软件 ............... 22 2.2.1 .NET Framework类 ............... 23 2.2.2 执行代码 .......

Global site tag (gtag.js) - Google Analytics