XmlDocument未保留空白
本文关键字:空白 保留 XmlDocument | 更新日期: 2023-09-27 18:21:56
XmlDocument
在自关闭标记的末尾添加一个空格,即使PreserveWhitespace
设置为true
。
// This fails
string originalXml = "<sample><node id='"99'"/></sample>";
// Convert to XML
XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = true;
doc.LoadXml(originalXml);
// Save back to a string
string extractedXml = null;
using (MemoryStream stream = new MemoryStream())
{
doc.Save(stream);
stream.Position = 0;
using(StreamReader reader = new StreamReader(stream))
{
extractedXml = reader.ReadToEnd();
}
}
// Confirm that they are identical
Assert.AreEqual(originalXml, extractedXml);
所需输出为:
<sample><node id="99"/></sample>
但我得到了:
<sample><node id="99" /></sample>
有没有办法抑制多余的空间?
以下是XmlDocument.Save(Stream)
的样子:
public virtual void Save(Stream outStream)
{
XmlDOMTextWriter xmlDomTextWriter = new XmlDOMTextWriter(outStream, this.TextEncoding);
if (!this.preserveWhitespace)
xmlDomTextWriter.Formatting = Formatting.Indented;
this.WriteTo((XmlWriter) xmlDomTextWriter);
xmlDomTextWriter.Flush();
}
因此,设置PreserveWhiteSpace
对节点内部没有影响。XmlTextWriter
的文件上写着:
例如,在编写空元素时,会在标记名和结束标记之间添加一个额外的空格。这提供了与旧浏览器的兼容性。
所以我想没有简单的出路。这里有一个变通方法tho:
因此,我编写了一个包装类MtxXmlWriter,它派生自XmlWriter,包装XmlWriter.Create()返回的原始XmlWriter,并执行所有必要的技巧。
您只需调用MtxXmlWriter.Create()方法之一,而不用使用XmlWriter.Create.()。除了WriteEndElement()之外,所有其他方法都直接移交给封装的原始XmlWriter。在调用封装的XmlWriter的WriteEndElement()之后/>quot;用"/>quot;在缓冲区中: