Sortie Pretty XML personnalisable avec déclaration XML UTF-8
La définition de classe suivante donne une méthode simple pour convertir une chaîne XML d'entrée en XML de sortie formaté avec la déclaration xml en UTF-8. Il prend en charge toutes les options de configuration offertes par la classe XmlWriterSettings .
using System;
using System.Text;
using System.Xml;
using System.IO;
namespace CJBS.Demo
{
public static class PrettyXmlFormatter
{
public static string GetPrettyXml(XmlDocument doc)
{
XmlWriterSettings settings = new XmlWriterSettings
{
Indent = true
, IndentChars = " "
, NewLineChars = System.Environment.NewLine
, NewLineHandling = NewLineHandling.Replace
};
StringWriterWithEncoding sw = new StringWriterWithEncoding(Encoding.UTF8);
using (XmlWriter writer = XmlWriter.Create(sw, settings))
{
doc.Save(writer);
}
return sw.ToString();
}
private sealed class StringWriterWithEncoding : StringWriter
{
private readonly Encoding encoding;
public StringWriterWithEncoding(Encoding encoding)
{
this.encoding = encoding;
}
public override Encoding Encoding
{
get { return encoding; }
}
}
}
}
Possibilités d'amélioration supplémentaire: -
- Une méthode supplémentaire
GetPrettyXml(XmlDocument doc, XmlWriterSettings settings)
pourrait être créée pour permettre à l'appelant de personnaliser la sortie.
- Une méthode supplémentaire
GetPrettyXml(String rawXml)
pourrait être ajoutée qui prend en charge l'analyse du texte brut, plutôt que de laisser le client utiliser le XmlDocument. Dans mon cas, j'avais besoin de manipuler le XML en utilisant le XmlDocument, donc je n'ai pas ajouté ceci.
Usage:
String myFormattedXml = null;
XmlDocument doc = new XmlDocument();
try
{
doc.LoadXml(myRawXmlString);
myFormattedXml = PrettyXmlFormatter.GetPrettyXml(doc);
}
catch(XmlException ex)
{
// Failed to parse XML -- use original XML as formatted XML
myFormattedXml = myRawXmlString;
}