UTF-8 XML घोषणा के साथ अनुकूलन सुंदर XML आउटपुट
निम्न वर्ग परिभाषा एक इनपुट XML स्ट्रिंग को स्वरूपित आउटपुट XML में xml घोषणा के साथ UTF-8 के रूप में परिवर्तित करने के लिए एक सरल विधि देती है। यह उन सभी कॉन्फ़िगरेशन विकल्पों का समर्थन करता है जो XmlWriterSettings वर्ग प्रदान करता है।
using System;
using System.Text;
using System.Xml;
using System.IO;
namespace CJBS.Demo
{
/// <summary>
/// Supports formatting for XML in a format that is easily human-readable.
/// </summary>
public static class PrettyXmlFormatter
{
/// <summary>
/// Generates formatted UTF-8 XML for the content in the <paramref name="doc"/>
/// </summary>
/// <param name="doc">XmlDocument for which content will be returned as a formatted string</param>
/// <returns>Formatted (indented) XML string</returns>
public static string GetPrettyXml(XmlDocument doc)
{
// Configure how XML is to be formatted
XmlWriterSettings settings = new XmlWriterSettings
{
Indent = true
, IndentChars = " "
, NewLineChars = System.Environment.NewLine
, NewLineHandling = NewLineHandling.Replace
//,NewLineOnAttributes = true
//,OmitXmlDeclaration = false
};
// Use wrapper class that supports UTF-8 encoding
StringWriterWithEncoding sw = new StringWriterWithEncoding(Encoding.UTF8);
// Output formatted XML to StringWriter
using (XmlWriter writer = XmlWriter.Create(sw, settings))
{
doc.Save(writer);
}
// Get formatted text from writer
return sw.ToString();
}
/// <summary>
/// Wrapper class around <see cref="StringWriter"/> that supports encoding.
/// Attribution: http://stackoverflow.com/a/427737/3063884
/// </summary>
private sealed class StringWriterWithEncoding : StringWriter
{
private readonly Encoding encoding;
/// <summary>
/// Creates a new <see cref="PrettyXmlFormatter"/> with the specified encoding
/// </summary>
/// <param name="encoding"></param>
public StringWriterWithEncoding(Encoding encoding)
{
this.encoding = encoding;
}
/// <summary>
/// Encoding to use when dealing with text
/// </summary>
public override Encoding Encoding
{
get { return encoding; }
}
}
}
}
आगे के सुधार के लिए संभावनाएँ: -
- एक अतिरिक्त विधि
GetPrettyXml(XmlDocument doc, XmlWriterSettings settings)
बनाई जा सकती है जो कॉलर को आउटपुट को अनुकूलित करने की अनुमति देती है।
- एक अतिरिक्त तरीका
GetPrettyXml(String rawXml)
जोड़ा जा सकता है जो क्लाइंट को XmlDocument का उपयोग करने के बजाय कच्चे पाठ को पार्स करने का समर्थन करता है। मेरे मामले में, मुझे XmlDocument का उपयोग करके XML को हेरफेर करने की आवश्यकता थी, इसलिए मैंने इसे नहीं जोड़ा।
उपयोग:
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;
}