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