如何使用WSO2 DSS从DB2存储和检索XML数据

时间:2015-05-04 08:02:01

标签: xml db2 wso2dss

如何使用WSO2 DSS在数据库(IBM DB2)中正确存储和访问XML数据?

我们有一个类似于以下的表,有两列:

  • id INTEGER
  • xmlData XML

xmlData列包含我想要存储的实际XML文档。

我设法让以下插入操作起作用:

<query id="insert_product" useConfig="DB2">
    <sql>INSERT INTO product (XmlData) VALUES (:XmlData)</sql>
    <param name="XmlData" sqlType="STRING"/>
</query>

插入工作正常,但实际数据需要包含在讨厌的CDATA部分中:

<xmlData>
    <![CDATA[
        <product>
            <code>acp</code>
            <name>A cool product</name>
        </product>
    ]]>
</xmlData>

我正在使用以下查询查询表:

<query id="get_product" useConfig="DB2">
    <sql>SELECT id, xmlData FROM product WHERE id = :id</sql>
    <result element="product">
        <element column="id" name="id" xsdType="integer"/>
        <element column="xmlData" name="xmlData" xsdType="string"/>
    </result>
    <param name="id" sqlType="INTEGER"/>
</query>

查询工作正常,但XML列的输出是转义的:

<product>
    <id>1</id>
    <xmlData>
        &lt;product&gt;
            &lt;code&gt;acp&lt;/code&gt;
            &lt;name&gt;A cool product&lt;/name&gt;
        &lt;/product&gt;
    </xmlData>
</product>

我想这是预料之中的,因为该列的DSS数据类型为string

数据以XML格式存储在数据库中(DB2验证它是否具有良好的格式)。

问题:
如何告诉DSS将列数据作为XML处理?插入中不需要CDATA部分,输出不得转义。

Dislaimer:
不用说,以上是一个简化的例子。存储在表中的实际XML是一个冗长,复杂的文档,需要部分理解。

1 个答案:

答案 0 :(得分:-1)

我认为最简单的方法是将 xmlData 转换为 XMLTABLE

developerworks上的更多信息:Retrieving XML data in relational format

然后您可以将其转换为复杂的元素结果:Grouping Data into Complex Elements

希望它有所帮助。