Как создать XML с - PullRequest
       3

Как создать XML с

1 голос
/ 29 мая 2020

Предположим, я хочу сгенерировать часть 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

1 Ответ

0 голосов
/ 29 мая 2020

Может быть не лучшим решением, это взлом с 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>

Полное демонстрационное решение решения можно найти в dbfiddlelink https://dbfiddle.uk/?rdbms=oracle_18&fiddle=54dc5d9b1d4c8b2b08912925da59837c

...