2010-03-09 21 views
161

Aquí es cómo me estoy convirtiendo actualmente XMLDocument a cadenaConvertir XmlDocument para cuerdas

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

xmlDoc.WriteTo(xmlTextWriter); 

return stringWriter.ToString(); 

El problema con este método es que si tengo " ((comillas) en la que tengo atributos) que se les escapa

por ejemplo:.

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

Arriba está el XML esperado. Pero vuelve

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

que puedo hacer String.Replace "\", pero es que el método de acuerdo? ¿Hay algún efecto secundario? ¿Funcionará bien si el XML contiene un "\"

Respuesta

149

No hay comillas. Es solo el depurador VS. Intenta imprimir en la consola o guardar en un archivo y verás. Como nota al margen: Siempre desechar objetos desechables:

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

Hizo un MessageBox.Show() y usted era correcto :) – akif

+2

+1 para corregir el código para usar 'using' bloques y no' XmlTextWriter'. –

+1

Worthing observando (como se menciona en las observaciones aquí: http://msdn.microsoft.com/en-us/library/system.xml.xmlwriter.aspx) que los elementos y atributos no se escribirán hasta que llame al método Cerrar del XmlWriter. – TonE

536

suponiendo que se opone un XmlDocument cuál es incorrecto con xmlDoc.OuterXml?

return xmlDoc.OuterXml; 

OuterXml property devuelve una versión de cadena del xml.

+2

Bueno, tienes razón. Intenté eso primero, pero cuando vi las comillas en el depurador. Pensé que es debido a OuterXml y probar ese método StringWriter. Pero estaba equivocado, las citas solo estaban en el depurador. Entonces solo usaré OuterXml. Gracias – akif

+97

DEBE ser aceptado respuesta.Corto y dulce :) –

+0

¡Reglas de mayoría! – Robino

2

" se muestra como \" en el depurador, pero los datos son correctos en la cadena y no es necesario que reemplace nada. Intenta volcar tu cadena a un archivo y notarás que la cadena es correcta.

5

Como un método de extensión:

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

Ahora simplemente usar:

yourXmlDoc.AsString() 
+0

Este ejemplo no puede llamar a Dispose en los dos escritores. –

+0

Actualicé el código en el ejemplo. – SixOThree

7

Si está utilizando la versión Windows.Data.Xml.Dom.XmlDocument de XmlDocument (utilizado en aplicaciones UWP por ejemplo), puede utilizar yourXmlDocument.GetXml() a obtener el XML como una cadena.