У меня есть служба WCF, которая должна возвращать строку XML. Но похоже, что писатель хочет создать только файл, а не строку. Я попытался:
string nextXMLstring = "";
using (XmlWriter writer = XmlWriter.Create(nextXMLstring))
Это генерирует ошибку о том, что nextXMLstring не имеет пути к файлу. Ему нужно что-то вроде:
using (XmlWriter writer = XmlWriter.Create("nextXMLstring.xml"))
Как я могу создать свой XML, а затем вернуть его в виде строки?
Спасибо!!
Как сказал Ричард,
StringWriter
это путь вперед. Однако есть одна загвоздка: по умолчанию онStringWriter
будет рекламировать себя как находящийся в UTF-16. Обычно XML находится в UTF-8. Вы можете исправить это, создав подкласс StringWriter;Это повлияет на декларацию, написанную пользователем
XmlWriter
. Конечно, если вы затем запишете строку в другом месте в двоичной форме, убедитесь, что вы используете кодировку, которая соответствует той кодировке, которую вы исправили для файлаStringWriter
. (Приведенный выше код всегда предполагает UTF-8; тривиально создать более общую версию, которая принимает кодировку в конструкторе.)Затем вы должны использовать:
источник
writer
это не удаляется более одного раза?Я знаю, что это старый ответ, но вот еще один способ сделать это. В частности, если вам не нужна спецификация UTF8 в начале строки и вы хотите, чтобы текст был с отступом:
источник
Encoding.UTF8.GetString(ms.ToArray())
упрощение по возвращении.ms.ToArray()
когда я пробовал это, не возвращает никаких элементов. Пришлось добавитьx.Close()
или переместить оператор return сразу за пределы внутреннего оператора using.Использование
StringBuilder
:источник
Ребята, не забудьте вызвать xmlWriter.Close () и xmlWriter.Dispose (), иначе ваша строка не завершит создание. Это будет просто пустая строка
источник
xmlWriter.Close()
было решение.Что ж, я думаю, что самым простым и быстрым решением здесь было бы просто:
источник