如何使用< >创建xml[cdata[< ?pl sql中的xml

lo8azlld  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(190)

假设我想生成一部分从表中提取数据的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之后关闭

s4n0splo

s4n0splo1#

可能不是最好的解决方案,这是一个黑客与 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 列。值为 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;

输出:

相关问题