Подтвердить что ты не робот

Как создать xml с помощью xml-writer без элемента объявления

Я использую XmlWriter.Create(), чтобы получить экземпляр записи, а затем написать XML, но результат имеет <?xml version="1.0" encoding="utf-16" ?>, как я могу сказать, что мой xml-writer не производит его?

4b9b3361

Ответ 1

Используйте XmlWriterSettings.OmitXmlDeclaration.

Не забудьте установить XmlWriterSettings.ConformanceLevel в ConformanceLevel.Fragment.

Ответ 2

Вы можете подклассифицировать 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 ...

Ссылка: Это сообщение в блоге от Скотта Гензельмана.

Ответ 3

вы можете использовать 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;
        }
    }