XML文件解析技术总结(一)

XML文件解析技术总结(一)

在开发CSPM建模工具时很自然的要用到XML文件的解析技术。现在我们就总结一下在这方面的学习所得。

XML简介

XML的是eXtensible Market Language(即可扩展的标记语言)的缩写,它是标准通用标记语言(Standard Generalized Markup Language,  SGML)的一个子集。

SGML功能非常的强大,它是可以定义标记语言的元语言。而由于它的复杂,不适合于应用。于是W 3C 组织在1996年开始设计一种可扩展的标记语言,从而将SGML的丰富功能与HTML的易用性结合在Web应用中,于是就有了XMLXML它是一种开放的、自我描述的方式定义了数据结构。在描述数据内容的同时能突出对结构的描述,从而体现出数据与数据之间的关系。

大家可能比较熟悉HTML。但与HTML相比,XML有下列优点:

l        XML将数据和显示分开

HTML文档将数据、页面的排版、以及页面的表现形式混合在一起,如果要增加新的数据,相应地就要调整数据排版与显示方式。这样不利于数据的交换以及数据的操作,例如插入数据和删除数据。随着电子商务等网络应用的普及,不同系统、不同平台的信息交换日益频繁,而HTML本身的不足,限制了它在Web开发中的应用。

XML只描述数据和数据的结构。从而将数据和显示分开,我们就可以为同一份数据设计不同的排版和显示风格,而数据本身不做任何的改变。

l        XML对文档的格式要求更加严格

由于HTML文档格式的松散,导致了HTML文档解析的复杂性,当然也造成了浏览器的兼容的问题。

XML文档对格式有非常严格的要求,凡是符合标准的文档就是格式良好的XML文档(Well-Formed XML Document)。

l        XML有且只能有一个根元素

这减少了在解析文档时的难度。

XML文档的解析

在解析XML文档时通常是利用XML解析器对文档进行分析,而应用程序就是通过解析器提供的API而得到XML数据。

 

如果不同的开发商开发的XML解析器提供的API都不一样,那么应用程序只能使用一个特定的解析器。一旦更改解析器,就要重新更改代码,这是相当痛苦的。所以目前几乎所有的解析器都对两套标准的API提供了支持,它们就是DOMSAX(标准的威力啊)。

DOMSAX只是定义了一套标准的接口,以及一些默认的实现。而解析器的开发商在开发解析器的时候就要实现这些接口。用户只要根据这些接口就能访问XML文档,却不必去知道具体的实现(这就是面向对象编程思想中的:针对接口编程,而不是对类编程)。

ApacheXerces是一个使用非常广泛的解析器。它都支持DOMSAX,并提供了相应的接口。它更是提供了多种语言的实现版本。

....

       org.xml.sax.XMLReader sp = new org.apache.xerce.parsers.SAXParser();

       FileInputStream fis = new FileInputStream("some.xml");

       InputSource is = new InputSource(fis);

       sp.setContentHandler();

       sp.parse(is);

....

要利用Xerces访问XML文档,只需在应用程序中构造一个解析器的实现类的对象。例如:SAX定义的解析器接口是org.xml.sax.XMLReaderXerces中提供的实现类是org.apache.xerces.parsers.SAXParser

但是现在仍有问题:不同的解析器实现类是不同的,如果要使用另一个解析器,仍然需要修改程序,比如说就得修改org.apache.xerce.parsers.SAXParser( )这段代码。而JAXP API可以帮助我们在改动解析器时无需改动代码。JAXP提供了在解析器之上一个抽象层,并未提供任何解析XML的方法和实现。从而屏蔽了具体开发商的实现,允许开发人员以独立于厂商的API调用访问XML数据。

JAXP 1.1 开始, JAXP 就成为了 J2SE J2EE 的一部分。 JAXP 开发包有 javax.xml 包及其子包、 org.xml.sax 包及其子包、 org.w 3c .dom 及其子包组成。在 javax.xml.parsers 包中,定义了几个工厂类,用于加载 DOM SAX 的实现类。只要符合 JAXP 规范的解析器实现其中的接口和抽象类,开发人员就可以在不改动代码的前提下,任意切换底层的实现类。 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值