2010-04-02 2 views
1

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

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

+2

Если вы используете XElement.Load (путь), то > переключится на>. Можете ли вы прояснить свою проблему? –

+0

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

+0

- это ваш код получения с использованием XML или строк? –

ответ

1

Спецификация 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 вашей программы.

+0

Я не использовал это, так как вы правы в том, что код обработки виноват - но это ответ, который наиболее близко отвечает на вопрос. –

3

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

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

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

+2

На самом деле '' 'обычно не требуется для экранирования. Для получения точного требования см. Http://www.w3.org/TR/REC-xml#syntax. Тем не менее, я согласен с тем, чтобы быть безопасным и избегать '' 'все время. Любой анализатор, который соответствует спецификации XML, должен понимать '>'. –

+0

Есть ли случай, когда XElement может быть вызван для предоставления необработанной строки (в том числе экранирования, как в файле), а не для неэпизованного содержимого «Значение»? Судя по тому, что вы говорите, это звучит так, что у него есть код приема. –

+2

Да; 'Element.ToString()'. – SLaks

 Смежные вопросы

  • Нет связанных вопросов^_^