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,
StringWriteres el camino a seguir. Sin embargo, hay un inconveniente: de forma predeterminada,StringWriterse 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
writerno 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