Преобразование XmlDocument в строку


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

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

xmlDoc.WriteTo(xmlTextWriter);

return stringWriter.ToString();

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

Например:

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

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

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

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

5 172

5 ответов:

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

using (var stringWriter = new StringWriter())
using (var xmlTextWriter = XmlWriter.Create(stringWriter))
{
    xmlDoc.WriteTo(xmlTextWriter);
    xmlTextWriter.Flush();
    return stringWriter.GetStringBuilder().ToString();
}

предположим, есть объект XmlDocument xmlDoc что с xmlDoc.Внешний мир?

return xmlDoc.OuterXml;

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

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

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

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()

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