Tengo un servicio WCF que necesita devolver una cadena de XML. Pero parece que el escritor solo quiere crear un archivo, no una cadena. Lo intenté:
string nextXMLstring = "";
using (XmlWriter writer = XmlWriter.Create(nextXMLstring))
Esto genera un error que indica que nextXMLstring no tiene una ruta de archivo. Quiere algo como:
using (XmlWriter writer = XmlWriter.Create("nextXMLstring.xml"))
¿Cómo puedo construir mi XML y luego devolverlo como una cadena?
¡¡Gracias!!
Como dijo Richard,
StringWriter
es el camino a seguir. Sin embargo, hay un inconveniente: de forma predeterminada,StringWriter
se anunciará como en UTF-16. Por lo general, XML está en UTF-8. Puede arreglar esto subclasificando StringWriter;Esto afectará la declaración escrita por
XmlWriter
. Por supuesto, si luego escribe la cadena en otro lugar en forma binaria, asegúrese de usar una codificación que coincida con la codificación que corrija paraStringWriter
. (El código anterior siempre asume UTF-8; es trivial hacer una versión más general que acepte una codificación en el constructor).Luego usarías:
fuente
writer
no se va a deshacer más de una vez?Sé que esto es antiguo y está resuelto, pero aquí hay otra forma de hacerlo. Particularmente si no desea la lista de materiales UTF8 al comienzo de su cadena y desea que el texto tenga sangría:
fuente
Encoding.UTF8.GetString(ms.ToArray())
es una simplificación a su regreso.ms.ToArray()
no devuelve ningún artículo cuando probé esto. Tuve que agregarx.Close()
o mover la declaración de retorno justo fuera de la declaración de uso interna.Utilizar
StringBuilder
:fuente
Los chicos no se olviden de llamar a xmlWriter.Close () y xmlWriter.Dispose () o de lo contrario su cadena no terminará de crearse. Será solo una cadena vacía
fuente
xmlWriter.Close()
fue la solución.Bueno, creo que la solución más simple y rápida aquí sería simplemente:
fuente