2015-05-04 100 views
1

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

我们有两列下面类似的表:

  • ID整数
  • 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列逃脱CEPT:

<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是一个长而复杂的文档,需要部分理解。

+0

您是否想出了接受<值的解决方案? – zygimantus

回答

-1

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

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

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

希望它能帮助。

+0

这并不能回答我的问题,即使用WSO2 DSS检索存储在数据库中的XML数据。您只是为数据的实际存储(和检索)提供另一种解决方案。使用这种方法,我遇到了与我的问题完全相同的问题。 – Kallja

+0

@Kallja当然不会完全回答你的问题,因为AFAIK WSO2 DSS没有XML数据类型的输出映射。这是一个解决方法。在过去,我一直在寻找答案,这是我发现的与您的问题一样的最佳解决方案。使用这种方法,您不会遇到同样的问题,因为您的数据将以字符串和整数等映射数据类型显示。请试一试。 –