查询包含名称空间的XML数据
http://tech.ddvip.com 2007年07月03日 社区交流
内容摘要:如果想学习关于 XQuery 与 SQL/XML 的基础以外的更多知识,那么必须理解文档和消息中的 XML 名称空间对查询的语义的影响。否则,就可能收到意外的结果。幸运的是,学习如何查询包含名称空间的 XML 文档并不难。本文提供了一些例子来帮助您起步。
清单 7. 用于检索所有公司数据的不正确的 XQuery
xquery db2-fn:xmlcolumn('PARTNERS.DETAILS')/company %
然而,这个查询只返回示例表中的一个 XML 文档:
清单 8. 上述 XQuery 的输出
<company type="public">
<name>
Acme Tech
</name>
<specialty>
Technology
</specialty>
<contact>
<name>
John Smith
</name>
<title>
VP, Business Development
</title>
<email>
js@us.acme_tech.com
</email>
</contact>
</company>
这是因为该查询中的路径表达式仅指向没有名称空间的 <company> 元素。为了检索所有 <company> 元素,需要重新编写该查询。为了简单起见,可以在路径表达式中使用一个通配符。下面的 XQuery 让 DB2 检索所有文档中作为根节点的 <company> 元素,而不管这些元素的名称空间是什么:
清单 9. 修改后的 XQuery,检索所有公司数据
xquery db2-fn:xmlcolumn('PARTNERS.DETAILS')/*:company %
在 SQL/XML 中,这个查询可以表达为:
清单 10. 用于检索所有公司数据的 SQL/XML 查询
select xmlquery('$c/*:company' passing details as "c")
from partners
where xmlexists('$c/*:company' passing details as "c")%
来源:ibm.com 作者:C. M. Saracco 责编:豆豆技术应用