返回首页
当前位置: 主页 > 航空资料 > 计算机 >

XML高级编程上(53)

时间:2010-08-09 13:05来源:蓝天飞行翻译 作者:admin 点击:
  
程序清单5 - 7
126使用XML 高级编程
下载
在上面的代码中,我们调用了4个J S c r i p t函数: i n i t i a l i z e B o o k ( ),u p d a t e B o o k I n f o ( ) ,
a d d A u t h o r ( )和a d d C a t e g o r y ( )。这些函数利用D O M初始化和修改文档信息。表单由三组控件构成。
第一组是图书常规信息的输入框和更新按钮(由于在我们的图书X M L中图书常规信息只能出现
一次)。第二组是用于添加图书作者的表单(因为作者可以出现多次),最后一组是用于添加图
书类别的表单。
下面我们将创建X M L数据岛,它将包含已经完成的图书:
在本例中,使用数据岛作为通知Internet Explorer 5 的信号,说明要在代码中操作名为
d o c B o o k的X M L文档。注意,我们已经指定了X M L文档的根对象,即:名为B o o k的空元素。当
然,也可以选择在将数据岛发送至客户端之前不向其中写入任何内容,或者仅仅添加一些初始
信息(如:图书的I D)。
第5章文档对象模型使用127 下载
代码的下一部分包含用于操作图书的脚本:
我们将d o c B o o k 指定为全局变量, 这样访问X M L 文档时就不必使用全名
d o c u m e n t . a l l ( “ d o c B o o k ” ) . X M L D o c u m e n t 。这个语法是I E 5中新增的,它允许客户端J S c r i p t使用
XML DOM操作—X M L D O M D o c u m e n t对象的所有功能。我们将在i n i t i a l i z e B o o k ( )函数中初始
化d o c B o o k变量的值,你应该记得这个函数是在< B O D Y >标记的o n l o a d事件中调用的:
在以上代码中,我们首先初始化d o c B o o k变量,使之指向d o c B o o k文档。然后,将文档的
a s y n c属性设置为f a l s e。它使得对文档的所有操作都必须以同步方式执行—仅当操作完成后才
返回函数继续执行。它能够避免在文档更新过程中访问文档(另外,你可以编写一个事件处理
器等待o n d a t a a v a i l a b l e事件的触发—但是如果不需要执行特别的事件处理操作,最好让代码处
于等待状态)。最后,我们调用显示D O M内容的函数—以普通格式显示以及使用X S L样式表显
示。
我们还需要一个辅助函数。这个辅助函数根据元素名称创建或替换指定父元素的相应子元
素。这样,当我们的用户决定将书名由“ XML for Professionals”改为“Professional XML”时,
就不会导致< B o o k >元素中突然出现了两个< Ti t l e >子元素。
该函数从D O M中引入了一些新的属性和方法。在继续讨论之前,先看看这些新属性和新方
法。
c r e a t e E l e m e n t ( )方法作用于文档,它用于实例化E l e m e n t对象。它唯一的参数是要创建的新
元素的名称。方法将返回所创建的E l e m e n t对象。通过这种方式创建的E l e m e n t对象是孤立的;即:
它不与任何特定的父元素相关联。需要通过a p p e n d C h i l d ( )等方法将该元素链接到X M L节点树的
适当位置。
c r e a t e Te x t ( )方法作用于文档,它用于创建Te x t对象。它唯一的参数是构成Te x t对象内容的文
本,方法返回所创建的Te x t对象。与c r e a t e E l e m e n t ( )方法类似,c r e a t e Te x t ( )创建的节点也是孤立
的,它需要依靠特定的方法添加到节点树中。Te x t对象代表文档中无格式的文本;通常,它们作
为E l e m e n t对象的子对象。例如,在下面这个简短的代码片段中:
代码中的< B o o k >有子元素< Ti t l e > ;元素< Ti t l e > 有子对象< Te x t > ,它包含字符串
“Professional XML”。
a p p e n d C h i l d ( )方法作用于任何节点,它用于在两个节点之间建立父子关系。被添加的元素
作为方法的参数,方法将返回被添加的节点。
128使用XML 高级编程
下载
g e t E l e m e n t B y Ta g N a m e ( )方法可以作用于任何节点,它用于在本节点的子元素中定位标记与
参数字符串匹配的元素。它返回N o d e L i s t对象,其中包含与查询条件匹配的节点的无序集合。
r e p l a c e C h i l d ( )方法可以作用于任何节点,它将一个节点中的特定子节点替换为另一个子节
点。新旧节点都将作为方法的参数,方法将返回旧的(被删除的)节点。
程序清单5 - 8
在以上代码中,我们创建新的元素节点和文本节点,它们代表要添加的元素。然后,将文
本节点附加为元素节点的子节点。最后,检查父节点中是否存在与新创建的元素节点名称相同
的子节点。如果存在,将用新的子节点替换旧的子节点;否则,将新的子节点添加至父节点中。
下面,我们将实现用于更新文档中图书常规信息的函数:
程序清单5 - 9
第5章文档对象模型使用129 下载
以上代码获取表单输入控件中指定的值,并利用这些值创建新元素,然后将新元素添加到
文档中,或者替换原来的子元素。
下面的函数用于添加图书的作者:
程序清单5 - 1 0
该函数创建元素和文本对象,并在它们之间建立父子关系。然后,它检查文档中是否存在
容器元素< A u t h o r s >。如果不存在,函数创建该容器元素。最后,它将在函数开始处创建的元素
附加到新的< A u t h o r s >对象或已有的< A u t h o r s >对象中。而后,函数再次刷新文档,更新样式表
形式的图书信息以及纯X M L部分。
下面这个函数用于添加图书的类别:
程序清单5 - 11
130使用XML 高级编程
下载
此时, X M L文档仅仅以XML DOM节点树的形式存在于内存中。为了让用户看到信息的变
化,我们需要展示文档。下面这个函数正是完成这项功能,它使用样式表和普通格式展示文档
的内容:
程序清单5 - 1 2
使用文档的x m l属性,能够得到整个文档的纯文本X M L输出。这是大多数人对于X M L“文
件”的认识。需要注意的是, x m l属性是M i c r o s o f t对D O M的扩展—W 3 C计划在DOM Level 3中
 
中国航空网 www.aero.cn
民航翻译 www.aviation.cn
本文链接地址:XML高级编程上(53)
 
------分隔线----------------------------