如何使用WSO2 DSS在数据库(IBM DB2)中正确存储和访问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>
<product>
<code>acp</code>
<name>A cool product</name>
</product>
</xmlData>
</product>
我想这是预料之中的,因为该列的DSS数据类型为string
。
数据以XML格式存储在数据库中(DB2验证它是否具有良好的格式)。
问题:
如何告诉DSS将列数据作为XML处理?插入中不需要CDATA部分,输出不得转义。
Dislaimer:
不用说,以上是一个简化的例子。存储在表中的实际XML是一个冗长,复杂的文档,需要部分理解。
答案 0 :(得分:-1)
我认为最简单的方法是将 xmlData 转换为 XMLTABLE 。
developerworks上的更多信息:Retrieving XML data in relational format。
然后您可以将其转换为复杂的元素结果:Grouping Data into Complex Elements
希望它有所帮助。