Tenho um serviço WCF que precisa retornar uma string XML. Mas parece que o escritor quer apenas construir um arquivo, não uma string. Eu tentei:
string nextXMLstring = "";
using (XmlWriter writer = XmlWriter.Create(nextXMLstring))
Isso gera um erro dizendo que nextXMLstring não tem um caminho de arquivo. Ele quer algo como:
using (XmlWriter writer = XmlWriter.Create("nextXMLstring.xml"))
Como posso construir meu XML e depois retorná-lo como uma string ??
Obrigado!!
Como disse Richard,
StringWriter
é o caminho a seguir. Porém, há um obstáculo: por padrão,StringWriter
se anunciará como sendo UTF-16. Normalmente, o XML está em UTF-8. Você pode corrigir isso criando uma subclasse de StringWriter;Isso afetará a declaração escrita por
XmlWriter
. Obviamente, se você escrever a string em outro lugar na forma binária, certifique-se de usar uma codificação que corresponda a qualquer codificação corrigida para oStringWriter
. (O código acima sempre assume UTF-8; é trivial fazer uma versão mais geral que aceite uma codificação no construtor.)Você então usaria:
fonte
writer
não está sendo descartado mais de uma vez?Eu sei que isso é antigo e respondido, mas aqui está outra maneira de fazer isso. Especialmente se você não quiser o BOM UTF8 no início de sua string e quiser que o texto seja recuado:
fonte
Encoding.UTF8.GetString(ms.ToArray())
é uma simplificação no seu retorno.ms.ToArray()
não retorna nenhum item quando eu tentei isso. Tive que adicionarx.Close()
ou mover a instrução return fora da instrução using interna.Use
StringBuilder
:fonte
Pessoal, não esqueçam de chamar xmlWriter.Close () e xmlWriter.Dispose () ou então sua string não vai terminar de criar. Será apenas uma string vazia
fonte
xmlWriter.Close()
foi a solução.Bem, acho que a solução mais simples e rápida aqui seria apenas:
fonte