Select xmlcast('<case_id>123</case_id><checknumb>2345</checknumb>' as XML)

Этот запрос возвращает

&lt;case_id;gt;123&lt;/case_id
&lt;checknumb&gt;2345&lt;/checknumb

Как получить <case_id>123</case_id<checknumb>2345</checknumb>

Почему это происходит при преобразовании в xml.

0
Sarwan 30 Окт 2019 в 18:55

2 ответа

Ваш код пытается преобразовать строковый литерал '<case_id>123</case_id><checknumb>2345</checknumb>' как XML строку , а не XML документ . Строки XML не могут содержать внутри угловых скобок, потому что эти символы имеют особое значение для синтаксических анализаторов XML, поэтому угловые скобки преобразуются в сущности.

Если вы действительно хотите преобразовать ваш буквальный '<case_id>123</case_id><checknumb>2345</checknumb>' в XML документ , вам нужно сначала сделать его действительным XML-документом (добавив корневой элемент), а затем использовать XMLPARSE(DOCUMENT '<root><case_id>123</case_id><checknumb>2345</checknumb></root>') вместо.

1
mustaccio 30 Окт 2019 в 21:34

Если вам нужно создать XML sequence, вы должны использовать XMLCONCAT скалярной функции, а не пытаться преобразовать строковую константу в тип XML.

VALUES XMLCONCAT(XMLELEMENT(NAME "case_id", 123), XMLELEMENT(NAME "checknumb", 2345));

Если вам нужно произвести XML document, вы должны использовать следующее:

VALUES XMLELEMENT(NAME "doc", XMLCONCAT(XMLELEMENT(NAME "case_id", 123), XMLELEMENT(NAME "checknumb", 2345)));
0
Mark Barinstein 30 Окт 2019 в 22:32