`
MEclipse
  • 浏览: 974 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

关于一点XML的愚见

阅读更多
   我想说说我自己对XML这门语言的看法,从自己以前的学习过程中,XML感觉就像是上帝的一点光,总是会引领着IT技术的发展。
    XML是当今十大软件技术之一,它是一种数据交换模式,并且具有跨语言,跨平台的强大功能,通过它不同系统和不同程序之间可以进行无二性的交互数据,另外它还能作为一种层次型数据库进行使用,有效的保存数据,并且能够存储其数据关系,它是把数据和格式相互分离的一种先进技术。
    概念其实也不用多讲了,在当今IT流中,XML起着举足轻重的作用,用推动IT流的前进这句话来形容它其实一点也不过分。无论是在数据交换,内容管理,WEB应用,WEB集成等领域都有着一席之地。
    XML其实本身就是一个文本文件,很多人用它与RDBMS做比较,为什么XML如此的流行,是因为在数据库的使用当中,如果的对数据库进行直接操作,是由厂商自己所完成,每个厂商都不一样,所以是具有保密性,要想访问到对应的数据库,那么就得拥有对应厂商的驱动程序。而XML不一样,它只是一个文本文件,任何人都可以通过解析技术对它进行解析,所以从另外一方面来说,XML得益于另类开源这个词。可以这样说,全世界任何一门高级语言都可能会用到XML。总之,在XML中,存储小量数据,并且能够表示非常复杂的数据之间的关系。
    提到XML,可能很多人都会联想到相关的5个技术::校验技术,解析技术,查询技术,链接技术,转换和显示技术。这5个技术中校验和解析是由为重要的,先说一说XML的校验技术,对应的两种检验语言,DTD和XML Schema,随着时代的不断更新,目前来说DTD已经逐渐退出历史舞台了,取而代之的则是schema,但是我想说的是,如果把校验技术学的很好,那么就要必须得学好DTD,而不是把schema放在重点上,因为现在来说schema已经可以用软件工具自动生成代码了,实际开发是相当方便的。为什么要学习DTD呢,为什么要学习一个已经快要退出IT舞台的语言呢,其实内容很简单,在schema中很多地方其实是只有学习过DTD的人才能看的懂的,非常重要的一点则是schema和DTD出现的错误信息都是DTD格式的,如果没有DTD的基础,是不可能看懂这些错误信息的,那么出现错误之后将对调试毫无办法。
    DTD和schema其实都是约束XML文档的一种约束模式语言,而现在之所以schema更好,是因为他对XML文档的约束能力更加强大,更加的精确,定义的数据类型更加的丰富,如果两者之间进行比较的话,就我个人而言,觉得DTD才是关键,因为原始,所以根本,当然schema也是非常优秀的,只是要学习schema,个人觉得首先应该掌握好DTD。
    一个很明显的事实:通过驱动程序去访问数据库,而通过解析技术去访问XML,如何做到这些,太多太多的高手写过相关的太多太多的技术了。对于JAVA来说,从JAXP的DOM,SAX到JDOM,再到DOM4J,小小的文本文件拥有了大量的技术来对其进行解析。其实不要看XML文件只是一个文本,正因为他存储的数据关系复杂,所以对它的解析是比较困难的。解析其实就是读取文件,然后将文本文件分解成可以解析的元素的过程。SUN公司在早期定义的DOM接口和SAX接口,虽然因为复杂,我们已经基本不使用他们了,但是我们应该去了解一下他们背后的故事。
DOM是一种树状模型的API,通过这个API我们可以对XML文档进行解析,DOM解析的方式是:一次性的把XML读入到内存当中,然后进行解析,这种解析方式对定位节点是非常方便的,因为在内存中整个XML文档都已经存在,所以某个节点与其他节点之间的关系就是相当明确的,并且可以进行数据的修改,但是这种解析方式有明显的缺陷,就是不能解析大型的XML文档,当XML文档过大,那么就会造成内存泄漏,因为DOM太消耗内存了。
    另外一个则是SAX,它是simple API for XML的简称,从名字上来说,其实SUN公司是把它定义成一种更为简单的访问XML的方式,但是其实一点也没能得到简化,同样的与DOM一样是属于非常复杂的解析方式,不同于DOM,它的解析方式则是一种事件驱动模型,在这种模式当中,通过回调机制来通知节点的位置,这个解析方式是按顺序一步一步的来读取XML文档,然后进行解析的,优点则是可以读取较大型的XML文档,内存占用率小,但是仍然具有明显的缺陷:只能按顺序来进行解析XML,不能进行随机访问,这个是非常不方便的,也就是定位节点不方便,另外存在只读的功能,也就是说我们不能通过SAX来进行数据修改,并且在解析过程中,我们对XML文档的每个元素的遍历也只有一次。
    因为DOM和SAX对XML的解析步骤是相当复杂的,所以才有了JDOM这种新型的解析技术,随后又出现了优秀的解析XML文档的技术:DOM4J。对这两种技术我感触颇深,简单的来说JDOM是面向过程的,而DOM4J则是面向对象的,这样说其实很抽象,我们可以来看一看这个例子:
    这里有2个节点,A和B,用JDOM的方式是我们开发人员用自己 的方式把A+B拼接起来,然后再放入XML文档中,而其实放入到文档当中的这个步骤是我们开发人员来完成,也就是A+B+XML。
    如果用DOM4J来干这件事情的话,则是调用元素的ADD方法,来进行添加,这个ADD并不是我们自己去完成的,而是对象本身自己去完成的,怎么完成的其实我们并不知道,也就是A.add(B),xml.add(A),所以这是一种面向对象的解析方式。
  相关的XML的东西太多太多,而且非常复杂又充满了神奇的力量,个人认为,XML是IT流中的一朵奇葩,就算以后会被一种新的技术所取代,但是它留下的那些脚印,永远是不可磨灭的。这只是我个人的一些对XML的看法,仅次而已。

分享到:
评论
48 楼 hillshills 2009-06-25  

  XML?!

  老生常谈了......

  JDOM也有优点,不过XML4J的面向对象不错的。
47 楼 CodingMouse 2009-06-07  
任何技术的产生及推广都是在解决某一类特定问题的情况下产生的,JSON只是简化了XML的数据保存功能,但XML的数据结构展现却是JSON所不能比拟的。
46 楼 peteraml1 2009-05-07  
luolonghao 写道
尽量不用XML。
网络数据传输:JSON
配置文件:YAML


较喜欢用JSON,不喜欢用XML
45 楼 xingqiliudehuanghun 2009-05-05  
最招风的肯定是大树,有这么多人对xml有怨言,看来用的最多功能最强的就是xml了
44 楼 hax 2009-04-29  
cgwangjun 写道
写得真好! 精华贴也不过分。 XML 确实是未来的核心


已经成新手贴了。最后一下貌似是我投的。
43 楼 抛出异常的爱 2009-04-29  
1314520ln 写道
java的烂代码比较好懂一些吧.


怎么烂啊?
到是觉的.net也差不多啊

每天读大约200行以上的java烂代码.....情绪稳定
42 楼 cgwangjun 2009-04-29  
写得真好! 精华贴也不过分。 XML 确实是未来的核心
41 楼 1314520ln 2009-04-28  
java的烂代码比较好懂一些吧.


怎么烂啊?
到是觉的.net也差不多啊
40 楼 rocwon 2009-04-28  
json 代替 xml 是程序员战胜学院派的伟大胜利[/quot]
对某一个项目,某一段程序而言,你可以说XML笨重,效率低。。。等等缺点。
但对一个行业的标准化而言,XML的优势是独一无二的。
39 楼 lkjust08 2009-04-26  
xml是这个时代的新宠。
38 楼 calmness 2009-04-26  
我个人认为,不要把XML的复杂归为XML的错误,实际上正因为XML本身结构的复杂,也造就了它能够很好的表达复杂的结构,json之流是很简单,对于简单的数据结构就应该使用json,但是如果涉及到复杂的业务模型,json就力不从心了,别不信,你用json来描述一个复杂的业务流程看看?保证吐血。所以具体使用哪种方式,看需求而定。
37 楼 icefishc 2009-04-24  
mikeandmore 写道
kimmking 写道
json 代替 xml ??? 搞笑,
过去没有,现在没有,将来也没有。

json的描述能力还是太差了,但因此而简洁,js天生支持,所以某些场合代替了xml,
比如绝大部分的ajax中的x。

反观xml呢?已经可以应用到目前几乎全部的开发语言和领域。
但是,光荣属于SGML。

什么时候你才需要那么复杂的表述呢?

至少我认为没有必要把很多配置文件弄成xml的。
我的意思不是xml sucks,而是xml被过渡的使用了。

很多场合不是xml该用的地方。


嗯 赞同。XML有时被过度使用了。
36 楼 icefishc 2009-04-24  
mikeandmore 写道
icefishc 写道


不要轻易对自己不了解的东西的东西做评价。
??口碑极差?? 这是从哪听来的。

我选择用XML多半是因为想用XSLT XPath XML schema 这些东西.或者现有的系统需要用XML.
否则更倾向于用YAML.

lisper是这样的。
就是每天都在夸耀lisp非常非常强大(实际就是很强大),
然后遭到很多不明细节的群众围观。
然后被人认为是自夸自大。
于是lisp的口碑也从此变差了。。。。嗯

这和lisp的设计实现没关系。和lisp的宣传方式有关系。。。。

比如,我在这里发帖说“lisp完全可以替代java成为软件开发的骨干”肯定会被喷一样。。。。。。


呵呵, 可能有些人是这样的. 大多数没有那么极端.
我平是也会写些lisp的程序。 但我从来没有认为lisp会成为软件开发的骨干.
我身边学习lisp的人基本也持有相同的观点。  我们学习Lisp为的是学习编成思想。 仅此而已。
35 楼 不吃鱼的猫 2009-04-24  
xml的好处是适合机器读,缺点是不适合人读
34 楼 Xorcerer 2009-04-24  
抛出异常的爱 写道
UlsterBoy 写道
Durian 写道
json 代替 xml 是程序员战胜学院派的伟大胜利

JSON 能取代xml 么? 我很怀疑

xml强大之处在于设计时把人的感受作为一个考虑因素.


支持这个,虽然对于程序来说,它很啰嗦。
33 楼 抛出异常的爱 2009-04-24  
uda1341 写道
补充说明:

XML目前的困境在于:

面对越来越复杂的数据和关系,XML必须发展出越来越复杂的规范,定义出越来越复杂的文件,越来越向语言靠拢,在这个方向上,XML有甩不掉的历史包袱,面临极大的限制。

而在规范和解析器都日益变得庞大的进化过程中,XML在一些简单的特定领域又逐渐失去了简单灵活的优势。

正则式风格 文言文 加图片 手绘编程 才素王道 .....
听着像VS6
32 楼 uda1341 2009-04-24  
补充说明:

XML目前的困境在于:

面对越来越复杂的数据和关系,XML必须发展出越来越复杂的规范,定义出越来越复杂的文件,越来越向语言靠拢,在这个方向上,XML有甩不掉的历史包袱,面临极大的限制。

而在规范和解析器都日益变得庞大的进化过程中,XML在一些简单的特定领域又逐渐失去了简单灵活的优势。
31 楼 uda1341 2009-04-24  
XML是越来越难懂了,原因在于越来越多的信息被附加在XML上。

对于复杂关系的表达,树状结构已经不堪重负。用XML定义一切的企图,只是不切实际的幻想。

很多的概念,似乎看起来都可以用XML来表达,但实际做起来,处理上为什么会这么繁杂?

原因在于树状结构本身,它只是一种数据存储的层次结构,其能力并不足以说明大量复杂的概念,但开始我们为什么会有这种错觉呢?XML能存储数据没错,但概念上的联系,却有一部分被迫包含在了对XML的处理代码中。也就是说,一个XML文件所包含的信息是不完全的,还必须依赖于特定的处理代码,才能够展现出我们所要表达的所有概念。这一部分概念在XML文件中的缺失,为对XML的处理增加了很多不必要的麻烦。

前面有人说到LISP,其实,最合适的,莫过于Prolog了,通过为Prolog定义一个子语言,我们可以发现,现有的XML规范可以变得非常的清晰,易懂。

假如用一段PROLOG代码来替换一个XML文件,我们面对的就不是一个静态的层次结构,还要自己做诸多处理才能满足要求,我们所面对的是一个可以进行各种查询的智能数据库,可以向其提出各种问题,得到所需要的答案,处理过程变得非常简单和纯粹,其真正的原因在于,这些数据和数据之间的关系,在prolog代码中已经完整得到了表达。处理过程所需要做的,就是向这段代码提出问题,并得到答案。
30 楼 mikeandmore 2009-04-24  
kimmking 写道
json 代替 xml ??? 搞笑,
过去没有,现在没有,将来也没有。

json的描述能力还是太差了,但因此而简洁,js天生支持,所以某些场合代替了xml,
比如绝大部分的ajax中的x。

反观xml呢?已经可以应用到目前几乎全部的开发语言和领域。
但是,光荣属于SGML。

什么时候你才需要那么复杂的表述呢?

至少我认为没有必要把很多配置文件弄成xml的。
我的意思不是xml sucks,而是xml被过渡的使用了。

很多场合不是xml该用的地方。
29 楼 mikeandmore 2009-04-24  
icefishc 写道


不要轻易对自己不了解的东西的东西做评价。
??口碑极差?? 这是从哪听来的。

我选择用XML多半是因为想用XSLT XPath XML schema 这些东西.或者现有的系统需要用XML.
否则更倾向于用YAML.

lisper是这样的。
就是每天都在夸耀lisp非常非常强大(实际就是很强大),
然后遭到很多不明细节的群众围观。
然后被人认为是自夸自大。
于是lisp的口碑也从此变差了。。。。嗯

这和lisp的设计实现没关系。和lisp的宣传方式有关系。。。。

比如,我在这里发帖说“lisp完全可以替代java成为软件开发的骨干”肯定会被喷一样。。。。。。

相关推荐

    关于解析xml文件的,很有用的东东

    关于解析xml文件的,很有用的东东关于解析xml文件的,很有用的东东关于解析xml文件的,很有用的东东关于解析xml文件的,很有用的东东关于解析xml文件的,很有用的东东关于解析xml文件的,很有用的东东关于解析xml...

    有关于xml实验xml实验

    有关于xml实验xml实验有关于xml实验xml实验有关于xml实验xml实验有关于xml实验xml实验有关于xml实验xml实验有关于xml实验xml实验有关于xml实验

    Xml完全操作 XML增删改查

    XML(eXtensible Markup Language)是一种用于标记数据的语言,其设计目的是传输和存储数据,而非显示数据。在IT行业中,XML因其结构清晰、可扩展性强的特点,被广泛应用于数据交换、配置文件、Web服务等领域。本文...

    STM32解析XML

    在本文中,我们将深入探讨如何在STM32F107上使用minixml库解析XML(可扩展标记语言)文档,这对于那些初次尝试在嵌入式环境中处理XML数据的开发者来说,是非常有价值的。 XML是一种通用的数据交换格式,它允许结构...

    关于Delphi7读取保存XML

    关于Delphi7读取保存XML 读取XML,修改节点,保存XML的一个完整实例。

    Qt读写Xml文件,QTreeWidget显示Xml和导出Xml文件

    在Qt框架中,XML文件是一种常见的数据存储格式,它提供了结构化的数据表示方式,便于程序读取和写入。QTreeWidget是Qt提供的一种用于显示树状结构数据的控件,它可以很好地展示XML文件的层次结构。QXml是Qt中的XML...

    根据XML模版自动生成

    在IT行业中,XML(eXtensible Markup Language)是一种重要的数据交换格式,广泛应用于数据存储、配置文件、网络通信等领域。本话题主要关注如何根据XML模板自动生成XML文件,这通常涉及到数据库操作、数据处理以及...

    XMLViewer xml查看器

    XMLViewer,查看xml文件非常好用的工具。 Viewer(xml查看器)是一款专业的xml查看软件。他可以帮助用户方便查看xml,以便检测语法是否正确。 安装之后,右键点击XML文件,选择“ View ”,方便快捷。

    C++读取XML(彻底了解XML)

    C++读xml,包括读XML,写XML,让你完全了解XML。C++读xml,包括读XML,写XML,让你完全了解XML。C++读xml,包括读XML,写XML,让你完全了解XML。C++读xml,包括读XML,写XML,让你完全了解XML。C++读xml,包括读XML...

    XML校验工具,可以用来进行XML合法性检验

    ### XML校验工具详解 #### 一、XML与W3C简介 - **XML(Extensible Markup Language)**:一种标记语言,旨在定义一套规则,用于结构化文档中数据的存储和传输。XML的设计目标是尽可能地保持数据的原始性和纯粹性,...

    xml文件转xsd文件

    XML(eXtensible Markup Language)文件是一种用于存储和传输数据的标记语言,它以结构化的方式描述数据。XSD(XML Schema Definition)文件则是一种规范,用于定义XML文档的结构和数据类型,为XML提供了形式化的...

    VS之XML文件操作

    在Visual Studio(VS)中,XML文件操作是一个重要的开发任务,尤其对于处理数据存储、配置文件、序列化或数据交换等场景。XML(eXtensible Markup Language)是一种标记语言,它提供了结构化的数据表示方式,易于...

    创建想要的XML格式和读取XML,DataTable转XML和XML转DataTable

    XML(eXtensible Markup Language)是一种用于存储和交换数据的标记语言,具有自定义标记、结构化数据和易于解析的特性。在IT领域,XML常用于数据交换、配置文件和存储复杂数据结构。本篇内容主要介绍了如何创建、...

    java导入导出xml文件

    在Java编程中,XML(eXtensible Markup Language)是一种常用的数据交换格式,因其结构清晰、易于解析而被广泛应用于各种系统之间的数据传输。本文将深入探讨如何在Java中进行XML文件的导入与导出。 首先,理解XML...

    xml加密解密工具XMLEncryption

    xml加密(XML Encryption)是w3c加密xml的标准。这个加密过程包括加密xml文档的元素及其子元素,通过加密,xml的初始内容将被替换,但其xml格式仍然被完好的保留。 介绍 我们有3个加密xml的方法 1、仅仅使用对称...

    xml文件树形显示,可添加删除修改xml节点

    XML(Extensible Markup Language)是一种用于标记数据的语言,它被广泛应用于数据交换、配置文件以及文档存储等领域。在处理XML文件时,为了更好地理解和操作XML文档,通常会将其以树形结构显示,这种方式能直观地...

    xsd生成xml工具

    在IT行业中,XML(eXtensible Markup Language)是一种用于标记数据的标准格式,而XSD(XML Schema Definition)则是用于定义XML文档结构和数据类型的规范。"xsd生成xml工具"是一个实用程序,它允许开发者根据XSD...

    C++ 读写XML文件

    XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,它在软件开发中扮演着重要的角色,尤其是在跨平台数据交换、配置文件、序列化对象等方面。本项目"**C++ 读写XML文件**"是针对MFC(Microsoft...

    c# 操作XML 技术

    以下是关于 C# 操作 XML 技术的详解: 一、如何用 XML DOM 的方式读取 XML XML DOM 方式是最原始的一种操作 XML 的途径,从 .NET Framework 1.0 开始就开始支持 DOM 方式。 1.1 如何以 DOM 方式加载 XML 要读取 ...

    Notepad++的XML Tools插件格式化XML文件插件

    (2) 解压Xml Tools 2.4.8 Unicode.zip,关闭Notepad++ (3) 将xmltools子文件夹下的XMLTools.dll拷贝至Notepad++的plugins子文件夹 (4) 将ext_libs子文件夹下的所有dll文件拷贝至Notepad++的根目录(与notepad++.exe...

Global site tag (gtag.js) - Google Analytics