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

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

select    xmlelement("TAG1",
          xmlelement("TAG2",col2),
          xmlelement("TAG3",
          xmlelement(,sql,plsql"/>
	














首页 > 解决方案 > 如何创建 XML

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

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

select    xmlelement("TAG1",
          xmlelement("TAG2",col2),
          xmlelement("TAG3",
          xmlelement(

问题描述

假设我想生成一部分 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 之后关闭此部分


将整数值转换为小数值(十进制)

寻找一种不使用字符串将正数(整数)从例如 123 转换为 0.123 的方法。可以是任意大小的整数。不关心负值。

Dim value As Integer = 123
Dim num As Decimal = "." & value.ToString

这看起来很简单,但我不确定如何使用数学来做到这一点。如何在不使用字符串的情况下进行转换?

标签: sqlplsql

解决方案


可能不是最好的解决方案,这是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>

现在使用 Column 中的列值。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;

输出 :

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

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


推荐阅读