J'ai un service WCF qui doit renvoyer une chaîne de XML. Mais il semble que le rédacteur souhaite uniquement créer un fichier, pas une chaîne. J'ai essayé:
string nextXMLstring = "";
using (XmlWriter writer = XmlWriter.Create(nextXMLstring))
Cela génère une erreur indiquant que nextXMLstring n'a pas de chemin de fichier. Il veut quelque chose comme:
using (XmlWriter writer = XmlWriter.Create("nextXMLstring.xml"))
Comment puis-je construire mon XML puis le renvoyer sous forme de chaîne?
Merci!!
Comme l'a dit Richard,
StringWriter
c'est la voie à suivre. Il y a cependant un hic: par défaut, ilStringWriter
s'affichera comme étant en UTF-16. Le XML est généralement en UTF-8. Vous pouvez résoudre ce problème en sous-classant StringWriter;Cela affectera la déclaration rédigée par
XmlWriter
. Bien sûr, si vous écrivez ensuite la chaîne ailleurs sous forme binaire, assurez-vous d'utiliser un codage qui correspond à celui que vous fixez pour leStringWriter
. (Le code ci-dessus suppose toujours UTF-8; il est trivial de créer une version plus générale qui accepte un encodage dans le constructeur.)Vous utiliseriez alors:
la source
writer
n'est pas éliminé plus d'une fois?Je sais que c'est vieux et répondu, mais voici une autre façon de le faire. En particulier si vous ne voulez pas la nomenclature UTF8 au début de votre chaîne et que vous voulez que le texte soit mis en retrait:
la source
Encoding.UTF8.GetString(ms.ToArray())
est une simplification à votre retour.ms.ToArray()
ne renvoie aucun élément lorsque j'ai essayé cela. J'ai dû ajouterx.Close()
ou déplacer l'instruction return juste à l'extérieur de l'instruction using interne.Utilisez
StringBuilder
:la source
Les gars n'oublient pas d'appeler xmlWriter.Close () et xmlWriter.Dispose () sinon votre chaîne ne finira pas de créer. Ce sera juste une chaîne vide
la source
xmlWriter.Close()
était la solution.Eh bien, je pense que la solution la plus simple et la plus rapide ici serait simplement de:
la source