Как мне остановить XElement.Save от экранирования символов? - PullRequest
2 голосов
/ 02 апреля 2010

Я заполняю XElement информацией и записываю ее в XML-файл, используя метод XElement.Save(path). В какой-то момент определенные символы в результирующем файле экранируются - например, > становится >.

Такое поведение недопустимо, поскольку мне нужно хранить информацию в формате XML, который содержит символ > как часть пароля. Как я могу записать «сырое» содержимое моего объекта XElement в XML без экранирования?

Ответы [ 2 ]

4 голосов
/ 02 апреля 2010

Недостаток такого поведения недопустим.

Автономный неэкранированный > равен неверный XML .
XElement предназначен для создания корректного XML.

Если вы хотите получить неэкранированный контент элемента, используйте свойство Value.

1 голос
/ 02 апреля 2010

Спецификация XML обычно позволяет > отображаться без экранирования. XDocument оберегает его и избегает, хотя он появляется в местах, где экранирование не требуется строго.

Вы можете заменить созданный XML. Помните, что http://www.w3.org/TR/REC-xml#syntax,, если это приведет к каким-либо последовательностям ]]>, XML не будет соответствовать спецификации XML. Более того, XDocument.Parse на самом деле отклонит такой XML с ошибкой "']]>' в символьных данных не разрешено.".

XDocument doc = XDocument.Parse("<test>Test&gt;Data</test>");
// Don't use this if it could result in any ]]> sequences!
string s = doc.ToString().Replace("&gt;", ">");
System.IO.File.WriteAllText(@"c:\path\test.xml", s);

Учитывая, что любой синтаксический анализатор XML, поддерживающий спецификации, должен поддерживать &gt;, я настоятельно рекомендую исправить код, который обрабатывает вывод XML вашей программы.

...