问题描述
|
我的问题真的很奇怪,我需要在c#中从不同来源编写一个巨大的xml文件。
因此,首先,我使用XmlTextWriter写入内存流:
MemoryStream ms=new MemoryStream();
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
**settings.Encoding = new UTF8Encoding(false,false); // set UTF8 without BOM !!**
XmlWriter xmlWriter = XmlWriter.Create(ms,settings);
xmlWriter.WriteStartDocument();
xmlWriter.WriteStartElement();
xmlWriter.WriteEndElement();
xmlWriter.WriteEndDocument()
xmlWriter.Flush();
xmlWriter.Close();
请注意,关闭xmlTextWriter后不会关闭ms。因此,我将ms传递给xmlDocument并编写xml元素的其他部分:
XmlDocument doc = new XmlDocument();
ms.Position=0;
doc.Load(ms);
然后,我使用以下代码编写:
XmlElement elmRoot=doc.DocumentElement(); //root
XmlElement elm=doc.CreateElement(\"New Element\");
XmlAttribute att=doc.CreateAttribute(\"att\");
att.Value=\"ABC\";
elm.Attributes.Append(att);
elmRoot.AppendChild(elm);
ms.Position=0;
doc.Save(ms)
但是,经过上述操作,我发现ms在生成的xml文件的开头仍然有三个BOM,导致无法在浏览器中打开该文件。有任何想法吗?
非常感谢!
解决方法
我不知道为什么您要再次覆盖MemoryStream,这似乎是个坏主意。
但是,如果您需要XDocument,则可以使用
XDocument.Save(XmlWriter writer)
选项,并确保使用无BOM设置创建编写器,如代码开头所示。