Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Преобразование в строку как XML


Автор: amarenkov 2.7.2008, 09:17
Добрый день.

Подскажите, кто знает, как мне преобразовать объект в строку, так же как это делает XMLWriter, не создавая его. Когда мы при помощи XMLWriter записываем double - он записывается через точку, а когда пишем string, то там все символы кавычек, угловых скобок и т.п. преобразуются в спец. строки, типа < и т.д. 

У меня есть шаблон: tmpl = "<cp name=\"{0}\" />". Если я использую Format(tmpl, "<имя>"), то, конечно же, строка вставляется в нужно место безо всяких преобразований. А мне необходимо ее преобразовать в xml-корректную строку.

Варианты решения типа: "создай XMLWriter, потом WriteStartElment, потом пишешь атрибут..." не предлагать smile.

Заранее спасибо smile.

Автор: altarvic 2.7.2008, 11:43
Предлагаю другой вариант: "создай XMLSerializer, потом метод Serialize..." 

Автор: Bogdan1024 2.7.2008, 15:21
Может быть System.Web.HttpServerUtility поможет? У него есть HtmlEncode/HtmlDecode...

Автор: mihryak 2.7.2008, 15:41
Цитата(Bogdan1024 @  2.7.2008,  16:21 Найти цитируемый пост)
HtmlEncode

он вроде как слишком много энкодит
явовские реализации XmlEncode заменяют только 
< ' & " >
на соответственно
&lt; &apos; &amp; &quot; &gt;

погугли на тему XmlEncode

Автор: PashaPash 2.7.2008, 15:55
mihryak, есть отличная .net-овская реализация XmlEncode. В классе XmlWriter. Но топикастера она не устраивает по необъяснимым причинам.

Автор: altarvic 3.7.2008, 08:09
amarenkov для строк используй XmlConvert.EncodeName

Автор: amarenkov 3.7.2008, 08:13
Цитата(PashaPash @  2.7.2008,  15:55 Найти цитируемый пост)
... топикастера она не устраивает ...


Меня не устраивает не сам этот объект, а то, что надо надо писать много функций - открыть тег, записать атрибут, закрыть тег. Иначе он ругается (по-моему). А мне бы какая-нибудь функция подошла бы. Желательно в статическом классе smile.

altarvic, спасибо, попробую сейчас.

Добавлено через 12 минут и 28 секунд
XmlConvert по-чуть не подходит. Все-таки имя и содержимое тега или атрибута - несколько разные вещи, и разным правилам подчиняются. Плюс к этому, преобразовать тип в строку не может, хотя и может обратно.

Конечно, если поставить ConformanceLevel.Fragment, то XmlWriter не ругается. Но необходимость создавать XmlWriterSettings и XmlWriter остается. Вообщем, если других вариантов не будет, то создам статический член XmlWriter в своем классе и буду его инициализировать в статическом конструкторе, а потом использовать smile.

Автор: altarvic 3.7.2008, 08:38
Тогда только так поскольку XmlWriter для этого использует внутренний класс XmlTextEncoder :(

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)