Преобразовать XmlDocument в строку - PullRequest
195 голосов
/ 09 марта 2010

Вот как я сейчас конвертирую XMLDocument в String

StringWriter stringWriter = new StringWriter();
XmlTextWriter xmlTextWriter = new XmlTextWriter(stringWriter);

xmlDoc.WriteTo(xmlTextWriter);

return stringWriter.ToString();

Проблема с этим методом заключается в том, что если у меня есть " ((кавычки), которые есть в атрибутах), он избегает их.

Для экземпляра:

<Campaign name="ABC">
</Campaign>

Выше приведен ожидаемый XML. Но это возвращает

<Campaign name=\"ABC\">
</Campaign>

Я могу сделать String.Replace "\" но этот метод в порядке? Есть ли побочные эффекты? Будет ли это работать нормально, если сам XML содержит "\"

Ответы [ 5 ]

606 голосов
/ 09 марта 2010

Предполагая, что xmlDoc является объектом XmlDocument, что не так с xmlDoc.OuterXml?

return xmlDoc.OuterXml;

Свойство OuterXml возвращает строковую версию xml.

164 голосов
/ 09 марта 2010

Кавычек нет. Это просто VS отладчик. Попробуйте распечатать на консоль или сохранить в файл, и вы увидите. В качестве примечания: всегда выбрасывайте одноразовые предметы:

using (var stringWriter = new StringWriter())
using (var xmlTextWriter = XmlWriter.Create(stringWriter))
{
    xmlDoc.WriteTo(xmlTextWriter);
    xmlTextWriter.Flush();
    return stringWriter.GetStringBuilder().ToString();
}
9 голосов
/ 01 марта 2016

Если вы используете Windows.Data.Xml.Dom.XmlDocument версию XmlDocument (используется, например, в приложениях UWP), вы можете использовать yourXmlDocument.GetXml(), чтобы получить XML в виде строки.

5 голосов
/ 01 октября 2012

Как метод расширения:

public static class Extensions
{
    public static string AsString(this XmlDocument xmlDoc)
    {
        using (StringWriter sw = new StringWriter())
        {
            using (XmlTextWriter tx = new XmlTextWriter(sw))
            {
                xmlDoc.WriteTo(tx);
                string strXmlText = sw.ToString();
                return strXmlText;
            }
        }
    }
}

Теперь использовать просто:

yourXmlDoc.AsString()
2 голосов
/ 09 марта 2010

" отображается как \" в отладчике, но в строке указаны правильные данные, и вам не нужно ничего заменять. Попробуйте вывести свою строку в файл, и вы заметите, что строка правильная.

...