如何使用没有声明元素的XML编写器创建XML

本文关键字:XML 创建 元素 何使用 声明 | 更新日期: 2023-09-27 18:03:50

我使用XmlWriter.Create()来获得一个编写器实例,然后编写XML,但结果有<?xml version="1.0" encoding="utf-16" ?>,我如何告诉我的XML编写器不生成它?

如何使用没有声明元素的XML编写器创建XML

使用XmlWriterSettings.OmitXmlDeclaration

不要忘记将XmlWriterSettings.ConformanceLevel设置为ConformanceLevel.Fragment

您可以创建XmlTextWriter的子类并覆盖WriteStartDocument()方法,从而不做任何事情:

public class XmlFragmentWriter : XmlTextWriter
{
    // Add whichever constructor(s) you need, e.g.:
    public XmlFragmentWriter(Stream stream, Encoding encoding) : base(stream, encoding)
    {
    }
    public override void WriteStartDocument()
    {
       // Do nothing (omit the declaration)
    }
}

用法:

var stream = new MemoryStream();
var writer = new XmlFragmentWriter(stream, Encoding.UTF8);
// Use the writer ...
参考:这篇博客文章来自Scott Hanselman。

您可以使用XmlWriter.Create():

new XmlWriterSettings { 
    OmitXmlDeclaration = true, 
    ConformanceLevel = ConformanceLevel.Fragment 
}
    public static string FormatXml(string xml)
    {
        if (string.IsNullOrEmpty(xml))
            return string.Empty;
        try
        {
            XmlDocument document = new XmlDocument();
            document.LoadXml(xml);
            using (MemoryStream memoryStream = new MemoryStream())
            using (XmlWriter writer = XmlWriter.Create(
                memoryStream, 
                new XmlWriterSettings { 
                    Encoding = Encoding.Unicode, 
                    OmitXmlDeclaration = true, 
                    ConformanceLevel = ConformanceLevel.Fragment, 
                    Indent = true, 
                    NewLineOnAttributes = false }))
            {
                document.WriteContentTo(writer);
                writer.Flush();
                memoryStream.Flush();
                memoryStream.Position = 0;
                using (StreamReader streamReader = new StreamReader(memoryStream))
                {
                    return streamReader.ReadToEnd();
                }
            }
        }
        catch (XmlException ex)
        {
            return "Unformatted Xml version." + Environment.NewLine + ex.Message;
        }
        catch (Exception ex)
        {
            return "Unformatted Xml version." + Environment.NewLine + ex.Message;
        }
    }