【问题标题】:How to create XML with <![CDATA[<?xml in PL SQL如何在 PL SQL 中使用 <![CDATA[<?xml 创建 XML
【发布时间】:2020-05-29 13:41:30
【问题描述】:

假设我想生成 XML 的一部分,从表中提取数据并将这部分放在 [CDATA 元素中。

例如,假设我生成了这个 XML

select    xmlelement("TAG1",
          xmlelement("TAG2",col2),
          xmlelement("TAG3",
          xmlelement("TAG4",col4)))
from MYTABLE

其中 col2 和 col4 是 MYTABLE 的列

从而得到如下的XML:

<TAG1>
 <TAG2> 10 </TAG2>
 <TAG3>
  <TAG4> England </TAG4>
 </TAG3>
</TAG1>

但是现在让我们假设我想得到这样的东西:

<TAG1>
 <TAG2> 10 </TAG2>
 <![CDATA[<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <TAG3>
  <TAG4> England </TAG4>
 </TAG3> ]]>
</TAG1>

我该怎么做? 我的意思是,即使在这种情况下,我希望 CDATA 中的部分不是使用恒定的长字符串创建,而是始终从表中提取数据,并且我希望在 TAG3 之后关闭此部分

【问题讨论】:

    标签: sql plsql


    【解决方案1】:

    可能不是最好的解决方案,这是REPLACE 的黑客攻击。

    对于固定字符串:

    select   REPLACE(REPLACE(xmlelement("TAG1",
              xmlelement("TAG2",col2),
               xmlelement("TAGX",
              xmlelement("TAG3",
              xmlelement("TAG4",col4)))),'/TAGX',']]'),'TAGX','![CDATA[<?xml version="1.0" encoding="UTF-8" standalone="yes"?')
    from MYTABLE;
    

    输出:

    <?xml version="1.0" encoding="UTF-8"?>
    <TAG1>
       <TAG2>10</TAG2>
       <![CDATA[<?xml version="1.0" encoding="UTF-8" standalone="yes"?><TAG3><TAG4>England</TAG4></TAG3>]]>
    </TAG1>
    

    现在使用来自CDATA.MYTABLE.Col5 Column 的列值。该值为StringtoInserttoCDATA.

    select   REPLACE(REPLACE(xmlelement("TAG1",
              xmlelement("TAG2",col2),
               xmlelement("TAGX",
              xmlelement("TAG3",
              xmlelement("TAG4",col4)))),'</TAGX',']]'),'TAGX','![CDATA[<?xml '||col5)
    as xmldataStringInsertedfromcol
    from MYTABLE;
    

    输出:

    <?xml version="1.0" encoding="UTF-8"?>
    <TAG1>
       <TAG2>10</TAG2>
       <![CDATA[<?xml StringtoInserttoCDATA><TAG3><TAG4>England</TAG4></TAG3>]]>
    </TAG1>
    

    完整的解决方案演示可以在dbfiddlelinkhttps://dbfiddle.uk/?rdbms=oracle_18&fiddle=54dc5d9b1d4c8b2b08912925da59837c找到

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-14
      • 1970-01-01
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多