使用<!-[CDATA]]->与Postgresql写入未格式化的字符串

时间:2018-12-20 08:20:02

标签: xml postgresql

我必须构建一个提供此xml流的sql查询。

<product sku="B8B301">
   <descriptif_court>
       <![CDATA[<p>1 activité de sport de glisse </p>
    <p>Pour 1 à 4 personnes</p>
    <p>110 activités de sport de glisse: jet-ski, wakeboard, airboard, motoneige, sky fly…</p>]]>
    </descriptif_court>
</product>

但是我不知道这样做。

我尝试

SELECT    XMLSERIALIZE(
    DOCUMENT

    xmlelement(
        NAME product,
        XMLATTRIBUTES (a.sku AS sku),
        xmlconcat(
            xmlelement( NAME descriptif_court,  concat('<![CDATA[', a.descriptif_court, ']]>'))
        )
    ) AS TEXT
)
FROM (

       SELECT
         b.code           AS sku,
         b.short_description
       FROM box b
         where b.code='B8B301'
     ) a

结果是:

<product sku="B8B301">
  <descriptif_court>
    &lt;![CDATA[&lt;p&gt;1 activité de sport de glisse &lt;/p&gt;
&lt;p&gt;Pour 1 à 4 personnes&lt;/p&gt;
&lt;p&gt;110 activités de sport de glisse: jet-ski, wakeboard, airboard, motoneige, sky fly…&lt;/p&gt;]]&gt;
  </descriptif_court>
</product>

我不想在<![CDATA[ ... ]]>内转义xml标签

有什么主意吗? 谢谢

1 个答案:

答案 0 :(得分:1)

您可以通过传递xmlelement()数据而不是content来明确告诉xml text参数已经是格式良好的XML,从而使该函数没有去转义内容。因此,在查询的上下文中,您只需要将concat()的结果强制转换为xml

...
xmlconcat(
    xmlelement( NAME descriptif_court,  
        concat('<![CDATA[', a.descriptif_court, ']]>')::xml
    )
)
...

db-fiddle demo