2010-03-09 2 views
161

Вот как я в настоящее время преобразования 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> 

я могу сделать string.replace «\», но этот метод хорошо? Есть ли побочные эффекты? Будет ли он работать нормально, если сам XML содержит "\"

ответ

149

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

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

Был ли MessageBox.Show(), и вы были верны :) – akif

+2

+1 для исправления кода для использования 'using' блоков, а не' XmlTextWriter'. –

+1

Стоит отметить (как указано в примечаниях здесь: http://msdn.microsoft.com/en-us/library/system.xml.xmlwriter.aspx), что элементы и атрибуты не будут записаны, пока вы не вызовете метод Close XmlWriter. – TonE

536

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

return xmlDoc.OuterXml; 

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

+2

Ну, вы правы. Сначала я попробовал это, но когда увидел кавычки в отладчике. Я думал об этом из-за OuterXml и попробовал этот метод StringWriter. Но я был неправ, кавычки были только в отладчике. Поэтому я просто использую OuterXml. Спасибо – akif

+97

Это ДОЛЖНО принять ответ.Короткие и сладкие :) –

+0

Правила большинства! – Robino

2

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

5

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

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

Этот пример не может вызвать Dispose для двух авторов. –

+0

Обновлен код в примере. – SixOThree

7

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