2010-03-09 6 views
161

Ecco come Attualmente sto convertendo XMLDocument a StringConverti XmlDocument per String

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

xmlDoc.WriteTo(xmlTextWriter); 

return stringWriter.ToString(); 

Il problema di questo metodo è che se ho " ((virgolette), che ho in attributi) che sfugge loro

Per esempio:.

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

Sopra è l'XML previsto. Ma ritorna

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

posso fare String.Replace "\" ma è che il metodo va bene? Ci sono effetti collaterali? Funzionerà correttamente se l'XML stesso contiene uno "\"

risposta

149

Non ci sono citazioni. È solo un debugger VS. Prova a stampare sulla console o salvare su un file e vedrai. Come nota a margine: smaltire sempre oggetti usa e getta:

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

Un MessageBox.Show() ed eri corretto :) – akif

+2

+1 per il fissaggio del codice per utilizzare i blocchi 'using' e non' XmlTextWriter'. –

+1

Notando (come menzionato nelle osservazioni qui: http://msdn.microsoft.com/en-us/library/system.xml.xmlwriter.aspx) che gli elementi e gli attributi non verranno scritti finché non si chiama il metodo Chiudi di XmlWriter. – TonE

536

Supponendo xmlDoc è un XmlDocument oggetto cosa è sbagliato con xmlDoc.OuterXml?

return xmlDoc.OuterXml; 

Il OuterXml property restituisce una versione stringa di xml.

+2

Bene, hai ragione. L'ho provato prima, ma quando ho visto le virgolette nel debugger. L'ho pensato a causa di OuterXml e ho provato il metodo StringWriter. Ma ho sbagliato le virgolette erano solo nel debugger. Quindi userò semplicemente OuterXml. Grazie – akif

+97

DOVREBBE essere accettato risposta.Breve e dolce :) –

+0

Regole di maggioranza! – Robino

2

" viene visualizzato come \" nel debugger, ma i dati sono corretti nella stringa e non è necessario sostituire nulla. Prova a scaricare la tua stringa in un file e noterai che la stringa è corretta.

5

Come un metodo di estensione:

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; 
      } 
     } 
    } 
} 

Ora da usare semplicemente:

yourXmlDoc.AsString() 
+0

Questo esempio non riesce a chiamare Dispose sui due writer. –

+0

Aggiornamento del codice nell'esempio. – SixOThree

7

Se si utilizza Windows.Data.Xml.Dom.XmlDocument versione di XmlDocument (utilizzato in applicazioni UWP per esempio), è possibile utilizzare yourXmlDocument.GetXml() per ottieni l'XML come una stringa.