查询包含名称空间的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    责编:豆豆技术应用

正在加载评论...