我的问题很奇怪。我需要在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,导致该文件无法在浏览器中打开。有什么想法吗?
非常感谢!
答案 0 :(得分:1)
我不知道你为什么再次覆盖MemoryStream,这似乎是一个坏主意。
但是如果您需要XDocument,那么您可以使用XDocument.Save(XmlWriter writer)
选项,并确保使用no-BOM设置创建编写器,如代码开头所示。