DB2 9 根蒂根基(730 测验)认证指南,第 7 部分: XQuery 简介(6)

developerWorks








XML 数据转换

XQuery 的一个强年夜功用是能够将 XML 数据从一种情势的 XML 转换为另一种。在本节中,您将体味举办 XML 数据转换是多么方便。

将 XML 转换为 HTML

在基于 Web 的运用步伐中,常常须要将扫数或部分 XML 文档转换为 HTML 以便举办体现。操作 XQuery 很方便完成这个进程。请考虑以下查问,它检索客户的地点、按邮政编码对功用举办排序并将输入转换为 XML 元素,这些元素是一个无序 HTML 列表的构成部分:

清单 29. 查问 DB2 XML 数据并前去 HTML 情势的功用

                    
xquery 
<ul> {
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
order by $y/zip
return <li>{$y}</li> 
} </ul>


这个查问以 xquery 枢纽字收尾,从而向 DB2 分析器走漏示意 XQuery 用作重要语言。第二哄骗无序列表的 HTML 符号(<ul>)呈现在功用中。它还引入一个花括号,这是这个盘录取运用的两对花括号中的第一对。花括号让 DB2 策画并处置此中搜罗的表达式,而不是将它作为字符串对待。

第三行遍历客户的地点,按序将变量 $y 绑定到每个 Address 元素。第四行搜罗一个 order by 子句,它指定功用必须根据客户的邮政编码(即绑定到 $y 的每个 Address 的 zip 子元素)举办升序排序(这是默许顺序)。return 子句走漏示意将 Address 元素困绕在 HTML 列表项符号中,然后再前去。最月朔行完毕查问并完成 HTML 无序列表符号。

这个查问的部分输入如下:

清单 30. 前一个查问的 HTML 输入

                    
<ul>
  <li>
     <Address>
         <street>9407 Los Gatos Blvd.</street>
         <city>Los Gatos</city>
         <state>CA</state>
         <zip>95032</zip>
     </Address>
  </li>
  <li>
     <Address>
         <street>4209 El Camino Real</street>
         <city>Mountain View</city>
         <state>CA</state>
        <zip>95033</zip>
     </Address>
  </li>
. . . 
</ul>


运用转换走漏示意 XML 文档中缺失的或反复的元素

我们来考虑前面提出的一个主题:如何编写 XQuery 在前去的功用中走漏示意缺失的值,以及走漏示意一个 XML 文档(例如一个客户记载)搜罗反复的元素(例如多个电子邮件地点)。一种方法触及到将前去的输入包装在一个新的 XML 元素中,如以下查问所示:

清单 31. 在 XQuery 功用中走漏示意缺失的值或反复的元素

                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address[zip="95032"] or $y/Address[city="San Jose"]
return <emailList> {$y/email} </emailList>


运转这个查问会前去一系列 emailList 元素,每个符合前提的客户记载都有一个 emailList 元素。每个 emailList 元素将搜罗电子邮件数据。如果 DB2 在一个客户的记载中只找到一个电子邮件地点,那么它会前去这个元素及其值。如果找到多个电子邮件地点,就会前去扫数 email 元素及其值。最后,如果没有找到电子邮件地点,就会前去一个空的 emailList 元素。

关于我们的示例数据,这个查问的输入是:

清单 32. 前一个查问的输入

                    
<emailList>
   <email>love2shop@yahoo.com</email>
</emailList>
<emailList/>
<emailList/>
<emailList>
   <email>beatlesfan36@hotmail.com</email>
   <email>lennonfan36@hotmail.com<emailList>
</emailList>   





版权声明: 原创作品,容许转载,转载时请务必以超链接情势标明文章 原始来由 、作者信息和本声明。不然将追查功令责任。

posted @ 2011-03-07 00:08  蓝色的天空III  阅读(148)  评论(0编辑  收藏  举报