曝光台 注意防骗
网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者
图5-9
第5章文档对象模型使用139 下载
这个简单的例子说明了如何在服务器端利用D O M处理信息。例如,在线发票系统可以通过
F T P将发票文件放置到服务器上的某个目录;每天早晨可以运行预定的程序解析目录中的所有文
件,将它们转化为X M L,并存档以备后用。或者,某个需要动态查询发票信息的程序可以从数
据库中读取适当的信息,使用D O M将它转化为X M L,并将生成的X M L返回给客户端进行处理。
2. 使用D O M修改信息
你可能已经注意到在上面的例子中, I S B N的格式非常不好。通常, I S B N是以特定位置的连
字符分隔的,例如:
然而,我们在文件中得到的是不含任何格式的纯数字:
我们能够通过在脚本中增加代码解决这个问题。下面将在前面的例子中增加用于设定I S B N
格式的代码。
当文件关闭,已经构建XML DOM树之后,添加以下代码:
程序清单5 - 2 5
以上代码在B o o k元素的子孙中搜索名为I S B N的元素。现在,我们知道每个I S B N元素有一个
子节点—包含格式不恰当的字符串的文本节点。我们读取该元素的值,在适当位置插入连字
符,用正确的格式更新元素值。需要注意的是,我们遍历了N o d e L i s t中的所有元素,因此如果存
在多个I S B N元素,以上代码块不会遗漏任何元素—这使得它非常适于修改大型X M L文件中深
层嵌套的元素。
现在,D i s p l a y B o o k . a s p文件的输出将如图5 - 1 0所示。
3. 使用D O M删除元素
D O M也可以用于从节点树中删除元素。比如, Kevin Wi l l i a m s不再是书的作者—但是所有
文件都仍然认为他是书的作者。我们可以使用D O M删除名为Kevin Wi l l i a m s的作者。
同样,我们是以前面的例子为基础的。
在我们添加的I S B N代码之后,继续插入以下代码块:
程序清单5 - 2 6
140使用XML 高级编程
下载
图5-10
以上代码在B o o k元素的子孙节点中扫描所有A u t h o r元素;并从父节点中删除含文本K e v i n
Wi l l i a m s的子节点。值得注意的是,我们不需要更多的清除工作;甚至连节点本身仍然是有效的,
但是它不与其他任何节点相关联,因此它不会出现在生成的X M L中。
现在,D i s p l a y B o o k . a s p文件的输出将如图5 - 11所示。
4. 再谈X M L流的产生
第5章文档对象模型使用141 下载
让我们回忆一下用于生成节点树的X M L的递归子例程Wr i t e N o d e X M L ( ):
图5-11
程序清单5 - 2 7
142使用XML 高级编程
下载
虽然这段代码完全能够应付我们的例子,但是它几乎不能处理其他可能出现的D O M变换形
式。尽管介绍能够正确表达各种节点类型的函数超出了本书的讨论范围,但是我们不妨看看如
何表达属性(这也是一个相当重要的节点类型)。
由于属性是特殊的节点,它并不是与之关联的元素节点的子节点;而是位于元素的a t t r i b u t e s
属性中。该属性返回的N a m e d N o d e M a p能够表达特定元素的所有属性信息。我们将在原来的
Wr i t e N o d e X M L ( )函数中增加处理属性的代码:
程序清单5 - 2 8
现在,属性的名称-值对将嵌入元素的起始标记中。为了将D O M的内容完全表示为文件,我
们还需要处理注释、处理指令和C D ATA部分等。
毫无疑问, D O M为访问X M L文档的内容提供了简单灵活的方式。D O M可以用在客户端或
服务器端,它能够对X M L结构进行操作、添加或删除。
5.4 DOM和XML的未来
X M L仍然处在早期开发阶段。如果你在HTML 1.0规范发布时曾经做过H T M L开发,你就知
道迄今为止这种语言已经发生了巨大的变化—X M L也可能出现同样的情况。在本节中,我们
将展望D O M和X M L的发展趋势,以及它们将对我们产生的影响。
5.4.1 W3C的工作
W 3 C正在定义X M L和D O M。在编写本书时,DOM Level 1规范处于建议状态, DOM Level
2规范处于候选建议状态。另外, W 3 C已经开始讨论DOM Level 3规范。在Level 3中,W 3 C准备
将用于加载文档和将X M L结构保存为文件的机制标准化(许多特定的D O M实现已经非正式地提
供了这些功能),另外它还将解决文档有效性验证的问题。该版本还将标准化文档的查看和格式
化机制。除了Level 3,W 3 C计划增加用户交互机制,例如:提示和查询语言。
第5章文档对象模型使用143 下载
5.4.2 应用
致力于提供能够访问和修改X M L文件的工具的第三方开发商不计其数。这些开发商都希望
能够充分利用D O M的功能。在许多实例中,这些工具构成了D O M的外包装,它使得开发人员能
够在更高层访问信息(而不是手工遍历节点树)。其中一个应用是X P a t h—这是一种查询语言,
它用于控制节点树的遍历和数据的获取。D O M在今后一两年内可能有所变化,因而这些用于访
问X M L文档的工具也将随之改变。
5.4.3 数据库、模式和DOM
数据库和X M L文档之间的界限越来越窄。目前,已经能够通过查询语言访问X M L文档,通
过X M L模式控制文档内容的类型,随着这些技术的发展,数据库和D O M之间的信息传递出现差
错的可能性越来越小。例如, M i c r o s o f t和O r a c l e已经在他们的数据库服务器应用程序中内置了
X M L支持。
5.5 小结
我们已经看到D O M为遍历构成X M L文档的节点树以及获取其中存储的信息提供了自然的面
向对象的机制。特别是:
• DOM为处理X M L文档提供了可编程的方法。
• DOM允许我们在客户端和服务器端修改X M L数据结构。
• DOM为数据库之间的信息传递提供了理想的机制。
• DOM在不同的平台上可以有不同的实现方式。
• DOM是内存密集型操作,它不适于处理大型X M L文件。
简而言之,读取和操作X M L文档时,使用D O M将保证各种平台之间获得最大程度的互操作
性。然而,使用D O M并不一定是最佳策略,特别是对于非常大的文件。为了避免将整个文档加
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:
XML高级编程上(55)