首页 > 编程知识 正文

java深拷贝的三种实现方式,java高级程序设计实战教程

时间:2023-05-04 21:50:29 阅读:151942 作者:542

1。 xml背景

格式良好(web-fromed ) xml可以不需要文档类型定义(DTD ),只要满足基本的xml格式规范,就被认为是格式良好的xml文档。 但格式标准只能表示要素、标签、格式合法,并不表示要素有意义或规范。

有效的xml文档必须是格式正确的文档,同时遵守相应的DTD文件约束。

2。 xml分析

xml文档分析的大致使用过程如下图所示。

xml解析器分析和操作指定的xml文档,并为在APP应用中使用提供界面。 如果解析器不同,则提供的接口可能不同。 幸运的是,目前所有的xml解析器都支持两个标准API:DOM和sax。

dom :即文档对象模型、文档对象模型。 这是用于处理w3c组织推荐的xml的标准接口。 dom是基于xml文档结构树的分析。

sax (即simple api for xml,是非正式xml社区的事实上的标准。 sax是基于事件流的分析。

dom和sax只是定义了某些接口和某些接口的默认实现,而APP应用程序要使用dom或sax访问xml文档,实际上还需要实现dom或sax接口的xml解析器apache的xerces是一个非常广泛的解析器,用于实现dom和sax调用接口,并提供多种语言的实现版本。

3。 用java语言分析xml文档

首先介绍jaxp :

现在可以根据dom或sax提供的api接口,使用适当的解析器实现类来分析和处理xml。 如下所示。

org.XML.sax.XML reader sp=new org.Apache.Xerces.parser.sax parser (

fileinputstreamfis=new file inputstream (“hello.XML”)

inputsourceis=newinputsource (fis;

sp.setcontenthandler (newmyconenthandler ();

sp.parse(is;

为了屏蔽xml解析器更改对代码的影响,java提供了处理xml文件的标准接口(实际上是抽象的工厂类),java开发人员使用javaapiforxmlprocessing (javapiforxmlprocessing ) jaxp没有提供解析xml的新方法,它只是在解析器之上封装抽象层。 在jdk1.6文档中,您可以看到javax.xml、org.w3c.dom和org.xml.sax包及其子包是jaxp的一部分。 jaxp由接口、抽象类和一些辅助类组成,符合jaxp规范的解析器实现其中的接口和抽象类。 开发时只需要使用jaxp的api进行编程,底层解析器在开发时是透明的,可以自由切换。

jaxp问世后,Java APP应用程序处理xml文档的过程如下图所示。

在中,实际采用哪个解析器的jaxp实现可以由系统属性、properties文件等组成。

以下具体介绍了几种基于java的xml分析方法。

3.1 DOM方式(jaxp )。

在javax.xml.parsers包中,定义了dom的抽象工厂类DocumentBuilderFactory。 该类包含一个静态方法newInstance (),它将生成DocumentBuilderFactory的实例。 在上面的jaxp编程中,解析器提供程序必须继承抽象类以生成特定的解析器工厂,然后根据该工厂类实例创建解析器对象,并使用该解析器对象处理xml文档。 此newInstance方法用于生成特定语法分析工厂类的实例。 有关生成解析器工厂类的实例的详细信息,请参见jdk文档。

获取解析器工厂类的实例类后,可以通过调用newDocumentBuilder )方法创建dom解析器实例。 dom解析器实例调用parser )方法来调用XMLq&; 可以获取整个a的Document对象。

3 .2 SAX方式(jaxp )

sax是一个事件驱动api,当sax分析xml文档时,它会向事件处理器发送不同的事件。 sax解析器接口和事件处理器接口是在org.xml.sax包中定义的。 XMLReader是在sax中定义的解析器接口,解析器提供程序为其实现借口。 APP应用程序必须创建事件处理程序。 您可以使用XMLReader的setContentHandler ()方法设置事件处理程序的实例。

和dom一样,jaxp也为sax解析器提供了抽象工厂类SAXParserFactory类。 sax语法分析工厂类的实例与dom语法分析工厂类的实例一样,都是使用newInstance ()方法创建的,但SAXParserFactory的newInstance )不同。

使用SAXParser和x

MLReader都可以用来对xml文档进行解析,前者只是对后者又一次的包装。

3.3 JDOM

dom被设计用于完成几乎所有的xml操作任务,同时又是与语言无关的,这就导致dom的api庞大而且复杂。为了使java程序员更方便地处理xml文档,两位国外的java技术专家创建了jdom。用developerworks上的一句话,“延续开源社群有需要就创建工具的历史传统,Java 技术专家 Jason Hunter 和 Brett McLaughlin 缔造了 JDOM”。所以可以认为,jdom是一种专门用于java语言解析xml文档的开放源代码框架。

jdom也使用对象树来表示xml文档,底层使用sax解析器分析xml文档,形成jdom树。

3.4 DOM4J

同jdom一样,dom4j也是应用于java平台,提供简单、灵活的处理xml文档的开发源代码库。很有意思的是,dom4j是由早期开发jdom的人分离出来而后独立开发的,(利益或意见不和?呵呵)与jdom相比,dom4j提供了更好的灵活性。从网上的评论可以看出,dom4j从性能、功能、易用性上都优于jdom,可以作为解析xml文件的首选。(看来后来分离出的那拨人选择还是正确的!)流行的hibernate,jaxm都采用了dom4j处理xml文件。

dom4j也使用sax解析器来分析xml文档,形成dom4j树;它也提供了用于大文档的基于事件的处理模型。

所以可以看出,jdom和dom4j只是开源社区产生出来的方便地解析xml的框架或工具,并没有创造新的xml解析方式。如果拿

拿以上四种解析xml的方法比较,用孙鑫老师的话,如果你需要频繁更换解析器就是jaxp方式,否则推荐使用dom4j。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。