XML就是可扩展标记语言(eXtensible Markup Language)。它与HTML一样都与SGML有莫大的渊源。大家知道SGML的核心思想就是内容与表现的分离。HTML最初的标记全部都是用来表示内容的,然而随着用户对于Web页面提出了更多的要求,为了争夺市场,IE和Netscape Navigator争相向HTML中添加了大量表示显示格式的标记,使得HTML越来越臃肿,偏离了正常发展的轨道。这种日趋恶化的情况一直到W3C推出了XHTML 1.0之后才逐渐改善。在此之前,W3C在1998年2月推出了XML 1.0规范。XML可以看作是W3C为了使得Web恢复健康发展而采取的拯救措施(拯救大兵瑞恩:))。
这份规范可以从 这里 获得。经过了几次修订,目前已经是第三版。而在非IE浏览器中创建XMLDocument对象的语法如下:
XMLDocument对象创建后的使用方法是一致的,
加载一个XML文档:得到XML 文档的根节点:
另外在IE中还可以使用loadXML()方法从一个字符串生成XML DOM树。
loadXML()方法不是标准的XML DOM方法,因此在非IE浏览器中无法使用。由上面可以看到只要创建了XML DOM 树后,访问方法在不同的浏览器中是一致的,创建阶段的差异非常容易通过封装的方法屏蔽掉,目前已经有很多的库可以封装这些差异,例如
Sarissa。
这份规范可以从 这里 获得。经过了几次修订,目前已经是第三版。
XML是SGML的子集,从结构上说,XML文档是合乎规范的SGML文档。它的目标是将通用的SGML变为像HTML一样能够在Web上传输和处理的语言。XML的设计既考虑了实现的方便性,同时也顾及了与SGML和HTML的互操作性。
XML有以下设计目标:
- XML应该可以直接应用于Internet。
- XML应该支持多种应用。
- XML应该与SGML兼容。
- 用于处理XML文档的程序应该易于编写。
- XML的可选特征应该极少,最好没有。
- XML文档应该清晰明了,可读性强。
- XML应该易于设计。
- XML的设计应该正式而简明。
- XML文档应该易于创建。
- XML标记是否简练不甚重要。
我们Ajax开发者主要是从实用的角度来使用XML技术的。XML在Ajax开发中主要可以用在以下的场合:
- 用于客户端与服务器之间的通信。XML强大的数据描述能力使得它非常适用于这样的场合。而且XML是平台中立的数据格式,使用XML可以达到最大的灵活性。
- 与XSLT相结合用于数据转换。
- 处理RSS数据。
- 用于在客户端缓存数据。
- 用于界面的描述,一些类似于XUL的开发框架,例如zk,就是这样做的。
XML DOM在不同的浏览器之间实现上的差异主要体现在两个方面,一个是XMLDocument对象的创建,另外一个是XMLDocument对象上的节点的查找过程。
目前在IE中创建XMLDocument对象的语法如下:
var xd = new ActiveXObject("Microsoft.XMLDOM");
var xd = document.implementation.createDocument("","",null);
加载一个XML文档:
xd.load("data.xml");var xn = xd.documentElement;xd.loadXML("<"+hd.__hwnodes.style.rootTag+"></"+hd.__hwnodes.style.rootTag+">");
按照W3C标准的方法,通过XML DOM来查找XMLDocument对象上的节点是通过XMLDocument对象的evaluate()方法来实现的。然而,evaluate()方法并不是很好用,IE在自己的实现中,实现了两个私有的方法selectSingleNode()和selectNodes()。这两个方法用起来方便的多,受到了开发人员的广泛欢迎,甚至误以为它们就是W3C的标准方法。其实这两个方法只能用在IE之中。不过,聪明的JavaScript程序员使用W3C标准的方法实现了这两个IE私有的方法,使得它们也能用在非IE的浏览器中。附件中的selectNodes.js就是这两个方法在非IE浏览器中的实现。
以上主要是从Ajax开发者的角度对于XML做了简要的介绍,更加详细的XML技术的介绍可以在附件中找到。附件中有一份我在两年前做新员工培训时所写的文档。其中一些高级的内容,例如XML的有效性验证,一般的Ajax开发都用不到。
附:推荐的XML相关书籍。
- 《无废话XML》,劳虎著。
- 《XML高级编程》,Didler Martin著。