SQL 2005 XML Специальные / Экранированные символы из System.Xml.XmlDocument.OuterXml - PullRequest
0 голосов
/ 16 июня 2009

У меня есть некоторый XML, который создается с использованием объекта XmlDocument в C #.

Затем я вставляю данные xml в столбец XML в SQL 2005, используя метод XmlDocument.OuterXml, чтобы получить необработанный xml.

У меня проблема в том, что xml содержит некоторые специальные символы. А именно:  Это потому, что xml создан из пользовательского ввода из различных источников.

Когда я выполняю вставку, я получаю сообщение об ошибке SQL, говорящее о разборе XML: недопустимый символ xml.

CREATE TABLE #MyTable (MyColumn XML)
INSERT INTO #MyTable VALUES ('<Element>&#x1F;&#x1C;</Element>')

Сообщение 9420, Уровень 16, Состояние 1, Строка 2

Синтаксический анализ XML: строка 1, символ 15, недопустимый символ xml

Может кто-нибудь указать мне, как мне это решить?

Мне будет крайне сложно что-либо изменить в объекте XmlDocument или в самом оригинальном xml, однако я могу изменить механизм, который я использую для получения RAW XML. При необходимости я также могу изменить настройки базы данных.

Ответы [ 2 ]

1 голос
/ 16 июня 2009

Если у вас есть XmlDocument с недопустимыми символами, у вас в основном нет действительного XML. Там нет никакого способа представить что-либо ниже U + 0020, кроме табуляции, возврата каретки и перевода строки в XML. Я не совсем уверен, почему, но это недопустимый XML в соответствии со спецификацией.

Вы можете хранить необработанный текст недопустимого XML в базе данных, но я предполагаю, что есть некоторая причина, почему вы хотели, чтобы это был столбец XML, во-первых:)

Вы действительно хотите сохранить этот недействительный XML? Вы знаете, откуда это и требуется ли это? Я лично попытался бы очистить данные, где это возможно.

(Кстати, первый дамп данных переполнения стека имел очень похожую проблему, так что это не только вы:)

0 голосов
/ 13 ноября 2009

Это возможно INSERT INTO #MyTable VALUES ('& # x1F;')

Я добавляю пробелы для ясности

INSERT INTO #MyTable VALUES (' & a m p; # x 1 F; </ E l e m t n>>)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...