说XML这块的东西倒不是因为研究的比较深入,只是因为项目里面使用的XML太频繁了,不过只是相当简单的使用,所以在这里只能算是一个对XML技术的相关资料的总结、备忘。
XML解析标准
这里说可能不太熟悉,但是如果换几个词就应该清楚。DOM、SAX。比较熟悉吧。这里之所以说他们是标准,只因为这两个东西定义的只是XML解析的方式,而此方式的具体实现跟这两个东西是没有关系。对比一下写程序,这里就是“接口”,定义了规约,想怎么实现都是可以的。
--DOM(Document Object Model):文档对象模型。原理就是把XML解析为内存中的可以树。由于XML保存在内存中了,所以,可以对其进行相应的增、删、改、查,操作。这里就需要说一下XPath了,XPath 为在一颗树中查找XML内容的方式定义。也是一个标准的东西,你满足了其相应的语法,即可在DOM树中查找到相应的内容。使用起了还是相当方便的。
--SAX(Simple API for XML) : 以事件驱动的解析方式,所谓的“推”方式的XML解析。原理就是在解析XML时,碰到不同的节点,则上报不同的事件,对不同的事件定义不同的回调函数,完成相应的解析逻辑。SAX对XML文档应该就是一次解析,并且不保留解析状态,所以SAX比DOM方式速度会快点、内存使用少点,但是功能上就要弱很多了。
--StAX(Streaming API for XML):这个东西可能有点陌生。这是所谓的“拉”方式的XML。原理就是平时常见的遍历,即扫描XML文档,当发现我感兴趣的部分时,才开始进行解析。所以,说速度的话,这是三种中最快的一个,而且编写代码也相对简单。它可以多次对同一个文档进行解析。但是相对的,它的缺点也是很明显的,就是无法对XML进行合法性验证,所以即便是不太完整的XML文档,也可以用它完成解析。StAX在JDK6.0中被加入。这里 有篇好文介绍StaX的
JDK中的位置: 以上标准,JDK中都已经包括相应的接口定义。DOM -- org.w3c.dom; SAX -- org.xml.sax; StAX -- org.xml.stream(JDK6.0)
更多细节的东西可以参考sun的教程
XML解析器
解析器即为XML解析标准的具体实现。不同的解析器,对应的实现接口都是统一的(DOM的、SAX的、StAX的)。所以不要看见JDOM就认为它只能以DOM方式解析,其实它也支持SAX的。常见的解析器有以下几种:Xerces Java,Crimson,JDOM,dom4j。各解析器的具体使用可以参考具体doc即可。
StAX是一个比较特殊的。JDK6.0刚开始提供支持,所以不是很清楚它的解析器。而基于这种XML Pull方式的解析器,因为速度快、消耗内存小,很早就被用于手机上的XML解析了,比较著名的就是kxml 。有兴趣的大家可以查下看看。
XML解析(绑定)工具
有了标准、有了实现还不够吗?这个工具干什么使的?标准有了、解析器有了,但是实用性还是差一点,所以,诞生了很多XML解析的工具。它的功能就是,避免你面对解析过程,而是直接面对XML里对你有用的东西。常见的有如下一些:XMLBean ,XStream ,Castor,JBind,Quick ,Zeus
项目中的XML
项目中我们用到了两处XML解析,分别使用了两个不用的解析器。一个地方使用的是Kxml的解析器,用于把XML压缩过后的文档转换成一般的文本的文档。另一个地方用户的是Zeus,主要是把XML文本文档解析为Java对象。这里主要说下Zeus。把DTD给Zeus,它可以生产能解析对应DTD文档的Java对象;反之,如果你使用这些Java对象把相应的树型XML文档定义构造好,又可用这些Java对象生成相应的XML文档。Zeus使用SAX方式解析的,效率还是相当高的,测评可以参考下面给出的文章。
目前感觉使用Zeus很麻烦的一点就是“有效信息的获取”。Zeus产生的Java对象是按XML的树型结构组织的,所以如果要获取层次比较深的内容时,会相当麻烦,因为你必须一层一层打开Java对象,而且有些节点定义还可能时List型的,这样又需要遍历List中的所有元素,同时,每次打开一个Java对象以后,还必须判断此Java对象是否为NULL,别看这一点判断,因为对象多了以后,会很麻烦。我们应用中嵌套深一点的可能在7、8层这样子,已经是相当麻烦了。在这种时候你就不得不考虑一下XPath的便捷了。所以,这里是否应该使用Zeus还是值得斟酌一下的。有效信息的获取上是一个相当麻烦的问题。
木已成舟,该做的都做的差不多,想用XPath也用不了。偏偏在这种时候又让我看到一个工具——JXpth 。这是一个在Java对象树中使用XPath语法进行查找的工具。可惜是相见恨晚啊...这个东西只是大概看了一下,没有具体使用。所以了解不多,是否真正能够放到应用中还是一个问题。
XML这块还有一个比较大的问题,就是Zeus生成的对象已经被使用到业务部分,造成现在即便想替换掉Zeus也是一个比较大的问题。这块以前也考虑过,但是还是没有想到太好的数据传递的方式,现在暂时也没有什么太大的问题。只是不知道以后会碰到什么,有点担心。
几篇好文
下面列几篇文章吧,相当的精彩。
Java 中的 XML: Java 文档模型的用法
Java 中的 XML: 文档模型,第一部分:性能
Java 中的 XML: 数据绑定,第 1 部分:代码生成方法 — JAXB 及其它
Java 中的 XML: 数据绑定,第 2 部分:性能
相关推荐
张孝祥老师的xml基础的课堂ppt!!欢迎下载
新手可以查看这个文档,xml基础.pdf
XML基础及实践开发教程(唐琳-主编)课后习题习题答案
Xml基础教程 高怡新版 ppt 源码
-XML基础教程源码-code-XML基础教程源码-code
xml基础教程ppt是xml的一些有关的基础知识和例子,
xml基础,xml语言的定义,xml的数据岛,xml结点的设置、获取。
1 X1 XML基础ML基础1 XML基础1 XML基础1 XML基础1 XML基础1 XML基础1 XML基础
这是我学习xml的笔记。xml基础实验收集,适合xml初学者学习,希望能帮到初学者。
关于XML的课件文档,主要是基础,包括XML基础、XSL、SAX、数据岛、XPath、CSS修饰XML文档等等。
XML基础教程课后习题解答.pdfXML基础教程课后习题解答.pdfXML基础教程课后习题解答.pdfXML基础教程课后习题解答.pdfXML基础教程课后习题解答.pdfXML基础教程课后习题解答.pdf
《XML 基础教程》系统地阐述了XML的基本概念和语法规则,介绍了如何用DTD与XML Schema来确保XML文档的有效性,讲述了使用CSS与XSL样式表来显示和转换XML文档的各个步骤,探讨了使用DSO与DOM访问XML文档的各种方法。...
Xml基础教程 高怡新版 源代码 ppt
XML基础教程与实验指导.rar,学习XML的新手们快来下吧
xml是w3c组织提出的一种可扩展性的标记语言,是独立于计算机平台的数据交换规范,PPT主要包括了xml概述,xml语法,文档类型定义,css,xslt,文档对象模型,xml与数据库等知识篇章,同时提供相关章节的例题源代码
这个XML基础教程文档是本人参考书籍整理完的,里面都附带有实例,我自己也是边学习边整理,感觉对于初学者很实用!
非常好的xml示例,简单易学! 第一章 XML基础 第二章 Schema 第三章 文档对象模型 第四章 使用XSLT 第五章 数据岛
资源名称:XML基础教程 第二版 资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
XML基础教程-电子教案PPT 适合初学者
XML基础实例 XML基础XML基础实例 XML基础