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

时间:2011-07-26 16:42:24

标签: c# .net xml xmlwriter

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

3 个答案:

答案 0 :(得分:25)

使用XmlWriterSettings.OmitXmlDeclaration

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

答案 1 :(得分:5)

您可以继承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的blog post

答案 2 :(得分:2)

您可以将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; } } 用于:

{{1}}