`
MEclipse
  • 浏览: 975 次
  • 性别: 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的看法,仅次而已。

分享到:
评论
28 楼 rainytooo 2009-04-24  
昨天我还想呢 下一个浏览器的方向就是取消 xml javascript直接用动态语言 再加上3d的opengl库
然后就看见新闻说google的o3d了
xml使命终结了
27 楼 changyuegu 2009-04-24  
dsdsdsdsd
26 楼 zozoh 2009-04-24  
kimmking 写道
zozoh 写道
Durian 写道
json 代替 xml 是程序员战胜学院派的伟大胜利

赞,我现在比较郁闷的是,没找到一个合适的编辑器,所以只能用 JavaScript 编辑器凑合着来编辑



kimmking 写道
json 代替 xml ??? 搞笑,
过去没有,现在没有,将来也没有。

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

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




comet123 写道
hatedance 写道
在我看来,XML能表达树形结构,这一点比csv进步了一点。功能强了,效率就差了,这点也是没话可说的基本规律。
其他的关于dom,schema,xslt都是外围的概念而已,都是表象,别迷了双眼。

xml到底是给人读的还是给机器读的,我想人只能读简单点的xml。

xml到底是给人读的还是给机器读的,我想人只能读简单点的xml。

这句话总结的好!!!
25 楼 kimmking 2009-04-24  
zozoh 写道
Durian 写道
json 代替 xml 是程序员战胜学院派的伟大胜利

赞,我现在比较郁闷的是,没找到一个合适的编辑器,所以只能用 JavaScript 编辑器凑合着来编辑



kimmking 写道
json 代替 xml ??? 搞笑,
过去没有,现在没有,将来也没有。

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

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

24 楼 zozoh 2009-04-24  
Durian 写道
json 代替 xml 是程序员战胜学院派的伟大胜利

赞,我现在比较郁闷的是,没找到一个合适的编辑器,所以只能用 JavaScript 编辑器凑合着来编辑
23 楼 comet123 2009-04-24  
hatedance 写道
在我看来,XML能表达树形结构,这一点比csv进步了一点。功能强了,效率就差了,这点也是没话可说的基本规律。
其他的关于dom,schema,xslt都是外围的概念而已,都是表象,别迷了双眼。

xml到底是给人读的还是给机器读的,我想人只能读简单点的xml。

xml到底是给人读的还是给机器读的,我想人只能读简单点的xml。

这句话总结的好!!!
22 楼 hatedance 2009-04-24  
在我看来,XML能表达树形结构,这一点比csv进步了一点。功能强了,效率就差了,这点也是没话可说的基本规律。
其他的关于dom,schema,xslt都是外围的概念而已,都是表象,别迷了双眼。

xml到底是给人读的还是给机器读的,我想人只能读简单点的xml。
21 楼 kimmking 2009-04-24  
json 代替 xml ??? 搞笑,
过去没有,现在没有,将来也没有。

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

反观xml呢?已经可以应用到目前几乎全部的开发语言和领域。
但是,光荣属于SGML。
20 楼 kimmking 2009-04-24  
luolonghao 写道
尽量不用XML。
网络数据传输:JSON
配置文件:YAML




无语了~~
19 楼 vlinux 2009-04-24  
json至少还差一个公用的校验机制
18 楼 抛出异常的爱 2009-04-24  
UlsterBoy 写道
Durian 写道
json 代替 xml 是程序员战胜学院派的伟大胜利

JSON 能取代xml 么? 我很怀疑

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

17 楼 UlsterBoy 2009-04-24  
Durian 写道
json 代替 xml 是程序员战胜学院派的伟大胜利


JSON 能取代xml 么? 我很怀疑


16 楼 DoubleEO 2009-04-23  
很多配置文件都用annotation了,确实方便,但是大局方面,还是XML好
15 楼 fjlyxx 2009-04-23  
其实 一种数据交换模式 这点就足以说明XML是好东西了. 我个人觉得XML的魅力不是体现在他装载数据这方面 而是体现在他表达数据结构这方面. 直接,明了.网络层可以不用XML进行传输  但是最终展现给别人(接口)的时候用XML是明智的选择. 在我眼里XML就是一种规范,一直约定.
14 楼 icefishc 2009-04-23  
whaosoft 写道
xml很好 可惜我用的很很一般的初级
json能网络传输了吗??

能.
13 楼 whaosoft 2009-04-23  
xml很好 可惜我用的很很一般的初级
json能网络传输了吗??
12 楼 icefishc 2009-04-23  
抛出异常的爱 写道
mikeandmore 写道
night_stalker 写道
XML 就像弱化的 lisp,不过它是确定性(decidable)的,适合表达文档,但没法表达程序。
XSL 就很像 lisp 了。

但是标签太冗长了,标签嵌套比括号嵌套啰嗦得多了……

现在的人连括号都懒得敲,以缩进代替括号的精简语法更加舒服(如 yaml,python)

有兴趣可以看看为什么当初选了树形文档表达网页
http://www.w3.org/History/1989/proposal.html

如果当初选了 lisp,现在 web 开发不知会简单多少 ……

lisper的口碑差。。。嗯。仅此而已。。。

如果用lisp
你看到程序员写出恶心代码时
你会不会想去死?
动不动就递归

java的烂代码比较好懂一些吧.


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

我选择用XML多半是因为想用XSLT XPath XML schema 这些东西.或者现有的系统需要用XML.
否则更倾向于用YAML.
11 楼 tuti 2009-04-23  
抛出异常的爱 写道
mikeandmore 写道
night_stalker 写道
XML 就像弱化的 lisp,不过它是确定性(decidable)的,适合表达文档,但没法表达程序。
XSL 就很像 lisp 了。

但是标签太冗长了,标签嵌套比括号嵌套啰嗦得多了……

现在的人连括号都懒得敲,以缩进代替括号的精简语法更加舒服(如 yaml,python)

有兴趣可以看看为什么当初选了树形文档表达网页
http://www.w3.org/History/1989/proposal.html

如果当初选了 lisp,现在 web 开发不知会简单多少 ……

lisper的口碑差。。。嗯。仅此而已。。。

如果用lisp
你看到程序员写出恶心代码时
你会不会想去死?
动不动就递归

java的烂代码比较好懂一些吧.



递归有什么不好?
你也要能想得出,迭代就能解决的算法才行啊。
10 楼 mikeandmore 2009-04-23  
抛出异常的爱 写道
mikeandmore 写道
night_stalker 写道
XML 就像弱化的 lisp,不过它是确定性(decidable)的,适合表达文档,但没法表达程序。
XSL 就很像 lisp 了。

但是标签太冗长了,标签嵌套比括号嵌套啰嗦得多了……

现在的人连括号都懒得敲,以缩进代替括号的精简语法更加舒服(如 yaml,python)

有兴趣可以看看为什么当初选了树形文档表达网页
http://www.w3.org/History/1989/proposal.html

如果当初选了 lisp,现在 web 开发不知会简单多少 ……

lisper的口碑差。。。嗯。仅此而已。。。

如果用lisp
你看到程序员写出恶心代码时
你会不会想去死?
动不动就递归

java的烂代码比较好懂一些吧.

HTML要是换成java表述的话我们都得死吧.............
9 楼 mikeandmore 2009-04-23  
Durian 写道
json 代替 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增删改查

    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