เอาต์พุต Pretty XML ที่ปรับแต่งได้พร้อมการประกาศ UTF-8 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 ในกรณีของฉันฉันต้องจัดการ XML โดยใช้ XmlDocument ดังนั้นฉันจึงไม่ได้เพิ่มสิ่งนี้
การใช้งาน:
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;
}