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 unXDocument
ouXElement
- 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 deXDocument
.
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
Bien sûr, vous n'avez pas de nous montrer comment vous êtes en train de construire le document, ce qui rend difficile de test... j'ai juste essayé avec une main-construit
XDocument
et qui contient pertinentes les espaces en trop.Essayer XmlWriterSettings:
Et de la transmettre comme
Voir aussi https://stackoverflow.com/a/3288376/1430535