Force XDocument à écrire à la Chaîne avec l'encodage UTF-8

Je veux être capable d'écrire du XML pour une Chaîne de la déclaration et, avec l'encodage UTF-8. Cela semble puissant difficile à accomplir.

J'ai lu un peu et essayé quelques-uns des réponses pour cela, mais ils ont tous des problèmes. Mon code actuel correctement les résultats en tant que UTF-8, mais ne conserve pas la mise en forme d'origine de la XDocument (c'est à dire tirets /espaces)!

Quelqu'un peut-il donner quelques conseils s'il vous plaît?

XDocument xml = new XDocument(new XDeclaration("1.0", "utf-8", "yes"), xelementXML);

MemoryStream ms = new MemoryStream();
using (XmlWriter xw = new XmlTextWriter(ms, Encoding.UTF8))
{
    xml.Save(xw);
    xw.Flush();

    StreamReader sr = new StreamReader(ms);
    ms.Seek(0, SeekOrigin.Begin);

    String xmlString = sr.ReadToEnd();
}

Le XML nécessite la mise en forme pour être identique à la façon .ToString() serait le format c'est à dire

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<root>
    <node>blah</node>
</root>

Ce que je suis en train de voir pour

<?xml version="1.0" encoding="utf-8" standalone="yes"?><root><node>blah</node></root>

Mise à jour
J'ai réussi à obtenir que cela fonctionne en ajoutant XmlTextWriter paramètres... Il semble TRÈS maladroit, si!

MemoryStream ms = new MemoryStream();
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.UTF8;
settings.ConformanceLevel = ConformanceLevel.Document;
settings.Indent = true;
using (XmlWriter xw = XmlTextWriter.Create(ms, settings))
{
    xml.Save(xw);
    xw.Flush();

    StreamReader sr = new StreamReader(ms);
    ms.Seek(0, SeekOrigin.Begin);
    String blah = sr.ReadToEnd();
}
  • Ce 'mise en forme'? Vous n'avez rien dit sur la mise en forme!
  • L'habitude des espaces de mise en forme que vous obtenez si vous venez pour un .ToString() sur un XDocument ou XElement
  • Veuillez donner un exemple de document d'entrée afin que nous puissions vérifier les réponses.
  • Fait... C'est juste l'espace mise en forme, je suis gêné à ce sujet que plus tard, je le hachage du XML donc besoin d'être sûr à 100% de la sortie est conforme.
  • J'ai fourni un assez moyen plus simple de le faire.
  • Titre et approuvé réponse suggère qu'il est UTF-8 rapport de l'UTF-16, mais sa propre solution montre que c'est sur la mise en forme / pretty-printing à la place. Au lieu des paramètres, il pourrait tout simplement ne xw.Formatting=Formatting.Indented .
  • Un sujet est Comment faire pour imprimer <?xml version=“1.0”?> à l'aide de XDocument.

InformationsquelleAutor Chris | 2010-10-06