Как получить xml-безопасную версию SQL-сервера Столбец XML

Существует ли способ получить xml-безопасную версию xml столбца в SQL-сервере?

Xml-сейфом я означаю выходить из специальных символов как <>', и, и т.д.

Я хотел бы постараться не делать замены сам. Есть ли сборка в функции в SQL-сервере.

То, чего я хочу достигнуть, должно сохранить содержание XML в другой атрибут XML.

9
задан pdiddy 27 July 2010 в 19:54
поделиться

2 ответа

Я предполагаю, что под xml-safe вы подразумеваете экранирование специальных тегов XML. Если у вас есть столбец XML, который вы хотите включить в другой документ XML, то у вас есть два варианта:

  • спроецировать столбец как [*]: select ..., xmlcolumn as [*], ... from ... for xml path... это встроит XML-содержимое колонки в результат XMl. Например, если столбец имеет значение value, то результат будет выглядеть как value.
  • спроецируйте колонку как имя колонки: select ..., xmlcolumn, ... from ... for xml path... это вставит содержимое столбца в качестве значения (т.е. выделит его). Например, то же значение, что и выше, даст <element><value</element>.

Если ваш вопрос касается чего-то другого, то вам придется перефразировать его соответствующим образом и правильно использовать термины. Не придумывайте новые термины, которые никто, кроме вас, не понимает.

Update:

Если вы вставляете значения XML в колонку, то вам вообще ничего не нужно делать. Клиентские библиотеки знают, как правильно экранировать. При условии, что вы правильно напишете свой код. Помните, что XML - это НЕ строка и никогда, никогда не должен рассматриваться как строка. Если вы пишете XML в своем клиенте, используйте соответствующую библиотеку XML (XmlWriter, XML DOM, Linq to XML и т.д.). При передаче XML в SQL Server используйте соответствующий тип: SqlXml. Хранимые процедуры должны использовать соответствующий тип параметров: XML. При чтении используйте соответствующий метод для чтения XML: GetSqlXml(). То же самое относится к объявлению типа в одном из конструкторов мириад (LINQ to SQL , EF и т.д.). В конечном счете, никогда не нужно экранировать символы XML вручную. Если вы обнаружили, что делаете это, значит, вы используете неправильный API, и вам придется вернуться к чертежной доске.

Хорошим началом для чтения является Поддержка XML в Microsoft SQL Server 2005.

И наконец, чтобы манипулировать XML так, как вы описываете (обновить XML столбец таблицы A с XML столбцом таблицы B), вы используете XML методы, в частности modify (... insert...), и вы связываете столбец таблицы B внутри XQuery с помощью sql:column:

update A
set somecolumn.modify('insert {sql:column("B.othercolumn")} before somenode')
from A join B on ...;

В своем комментарии вы угрожаете XML как строке, и, как я уже сказал, вы никогда не должны этого делать: строки и XML - это как вода и масло.

8
ответ дан 4 December 2019 в 07:22
поделиться

Содержимое столбца XML - это XML. По определению, это "безопасно для XML".

Нужно ли вам включать XML из столбца в элемент или атрибут XML другого документа XML? Затем просто сохраните внешний XML как строку в новом документе.

2
ответ дан 4 December 2019 в 07:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: