• 热门标签

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

时间:2010-08-09 13:05来源:蓝天飞行翻译 作者:admin
曝光台 注意防骗 网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者

输出如下:
程序清单8 - 11 3
(7) 表内容操作
由于X S LT是在源文档的变换后版本,而不是在源文档上操作的,所以不会修改原始文档。
正如前面我们所讨论的,有一些其他工具更适合于X M L文档的这类操作。
(8) 从不止一个数据源返回信息
304使用XML 高级编程
下载
X S LT提供一个函数xsl:document( )来使扩展文档在基础文档被转换的同时被处理。这就保
证了可以从多个数据源中抽取信息并集成到一个结果中。例如,假如说我们有一个文档位于和
页面s t a t u s . x m l相同的目录,而这个页面描述了c a t a l o g . x m l所显示的信息的状态:
程序清单8 - 11 4
现在,让我们看一下当我们请求Alex Homer所著书籍的标题时,如何把< G e n e r a t e d D a t e >元
素从文档添加到结果的结构中去:
程序清单8 - 11 5
我们已经引导X S LT处理器打开文档s t a t u s . x m l,并把元素< G e n e r a t e d D a t e >添加到了变换文
档的根元素< C a t a l o g >中。注意,普通的定位步骤可用来对函数document ( )产生的节点集进行过
滤。
产生的X M L文档为:
程序清单8 - 11 6
(9) 程序处理
第8章链接和查询使用305 下载
虽然利用X S LT进行某种程度的程序处理是可能的,但是它却不能提供和S Q L服务器或者
Oracle 相近的东西。例如,元素< x s l : f o r-each >支持限制形式的游标(允许每次一个地对节点集
中的独立节点进行操作),却不允许编程时游标向前或者向后“移动”。让我们看最后一个例子
—产生一列c a t a l o g . x m l包含的作者及每个作者参与写作的书的标题。
在S Q L中可以采用下列指令进行刷新:
程序清单8 - 11 7
这样可以产生表8 - 1 0所示结构类型的结果。
表8 - 1 0
作者标题
Alex Homer IE 5 XML Programmer's Reference
Alex Homer Professional ASP 3.0
Alex Homer Beginning Components for ASP
Brian Francis Professional ASP 3.0

系统接受这种单调的结构,然后提供一个消除重复作者信息的方法。另一部分利用在
S E L E C T指令中采用D I S T I N C T关键字首先提取作者,然后提取每位作者所著的书。
我们希望完美的X S LT转换输出看起来该是下面这个样子:
程序清单8 - 11 8
为了达到这个目的,我们准备使用一种新的X S LT元素类型—而且是可行的—利用它连
回到文档中另一个位置。让我们看一下如何实现,完整的页面如下所示:
程序清单8 - 11 9
306使用XML 高级编程
下载
我们把上面拆开,逐个看每一部分,首先:
程序清单8 - 1 2 0
这里,我们先利用< x s l : f o r- e a c h >产生一个关于文档中出现的作者名字的游标。注意,这里
会产生一个副本—每次一本书的作者将会被提到,作者的名字会出现在列表中。我们来看一
下如何尽快将这些名字区分开来:
我们将按字母顺序对名字排序(这里对第一个名字排序)。
程序清单8 - 1 2 1
这个指令存储了正在变量中出现的作者的值。在环境信息发生改变的时候,这将是回指信
息的一个很好的方法,后面我们将会看到这一点。
程序清单8 - 1 2 2
这是我们处理区分问题的一种不太好的方法。对于一位作者的每本书来说,通过< x s l : f o re
a c h >元素的select 属性选择节点会发生重复—例如,Alex Homer的名字会出现三次。为保证
每位作者仅操作一次,我们将作下面的测试。把XPa t h翻译成英语,这个测试是这样的:“O n l y
proceed if there's no <Author> element that appears earlier in the (original) document with the same
t e x t .”很自然地,这将保证每位作者真正出现一次,这样我们就可以得到正被寻找的这种区别。
(另外,由于X S LT变量范围规则的原因,在变量中保存上一个作者名,并和当前的作者相比较,
来看看是否发生了变化,“传统的”方法将不起作用)。
第8章链接和查询使用307 下载
程序清单8 - 1 2 3
我们创建了带有作者名字(从变量中得到)的< A u t h o r >元素和< N a m e >元素。
程序清单8 - 1 2 4
这里我们为文档中作者和当前作者相匹配的所有书的示例了另外一个游标。注意在这里我
们没有使用“ .”来代替$ t h i s a u t h o r—因为方括号内索引的上下文正好是正被核对的< B o o k >元
素的上下文,而不是第一个< x s l : f o r- e a c h >的上下文。在使用X S LT时了解上下文对避免产生不希
望的结果是很关键的。
程序清单8 - 1 2 5
我们将书的< Ti t l e >元素写到输出中,并继续迭代:
程序清单8 - 1 2 6
该页面的输出为:
程序清单8 - 1 2 7
308使用XML 高级编程
下载
8.6.5 查询语言展望
虽然X S LT和XPa t h可以使开发者在相当大程度上对查询和X M L文档内容表达进行操纵,然
而W 3 C表示这两种技术不是查询的最终解决方案。一些查询(像上面的b o o k s - p e r- a u t h o r查询)
如果使用X S LT和XPa t h将相当困难,而且查询语言中通常出现的一些附加功能(如元素的添加
或更新)是没有用的。W 3 C已经成立一个X M L查询研究小组( XML Query Working Group)来
研制从真实和虚拟的文档中提取数据的灵活的网络查询工具。不过,在本书写作的时候,该小
组还没有任何成果出来,我们期待不久一种更新的查询技术草案能够出现。
8.7 小结
这一章我们讨论一些目前最新的访问和操作X M L文档的最新技术:
• 回顾了W3C Inforset,W 3 C用它来描述组成X M L文档的信息块。
• 回顾了XLi n k规范,它定义了在数据源之间的文档中创建链接的机制。
• 回顾了XPo i n t e r,它定义了指向X M L文档中特定位置或者位置范围的机制。
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(104)