【发布时间】:2011-05-25 15:46:16
【问题描述】:
我的问题真的很奇怪。我需要用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文件开头还是有3个BOM,导致无法在浏览器中打开文件。有什么想法吗?
非常感谢!
【问题讨论】:
-
不知道但发现了这个:stackoverflow.com/questions/1755958/…
-
谢谢托比约恩。我知道问题是 doc.save(ms) 会添加 BOM。您发布的链接中的解决方案是使用 doc.save(xmlwriter) 并在 xmlwriter 中设置 encoding(false)。但是,是否可以在 doc.save(ms) 中省略 BOM?否则,我可能需要重写很多代码......
标签: c#