C#学习教程:XDocument:将XML保存到没有BOM的文件中XDocumentxml_document=newXDocument(newXDeclaration("1.0","utf-8",null),newXElement(ROOT_NAME,newXAttribute("note",note)));...xml_document.Save(@file_path);该文件已正确生成并成功通过xsd文件进行了验证。当我尝试将XML文件上传到在线服务时,该服务说我的文件在第1行是错误的;我发现问题是由文件第一个字节的BOM引起的。您知道为什么要将BOM附加到文件中以及没有它如何保存文件吗?正如字节顺序标记维基百科文章中所述:虽然Unicode标准允许UTF-8的BOM,但它不要求也不推荐它。字节顺序在UTF-8中没有意义,因此BOM仅用于将文本流或文件标识为UTF-8或从另一种具有BOM的格式转换而来。这是XDocument问题还是我应该联系在线服务提供商任何人都可以请求解析器升级吗?使用XmlTextWriter并将其传递给XDocument的Save()方法,这样您就可以更好地控制所使用的编码类型:vardoc=newXDocument(newXDeclaration("1.0","utf-8",null),newXElement("root",newXAttribute("note","boogers")));使用(varwriter=newXmlTextWriter(".\boogers.xml",newUTF8Encoding(false))){doc.Save(writer);UTF8Encoding类构造函数有一个重载,指定是否使用带有布尔值的BOM(字节顺序标记),在您的情况下为false。此代码的结果已使用Notepad++检查文件的编码进行了验证。第一:服务提供商必须根据XML规范进行处理,该规范??规定在UTF-8表示的情况下可能存在BOM。您可以强制在没有BOM的情况下保存XML,如下所示:XmlWriterSettingssettings=newXmlWriterSettings();settings.Encoding=newUTF8Encoding(false);//false表示不发出BOM。使用(XmlWriterw=XmlWriter.Create("my.xml",settings)){doc.Save(w);}(从这里谷歌它:http://social.msdn.microsoft.com/Forums/en/xmlandnetfx/thread/ccc08c65-01d7-43c6-adf3-1fc70fdb026a)使用时摆脱BOM字符的最有效方法XDocument就是直接保存文档,然后直接把文件当成文件读取,然后再写回来。文件例程将为您删除字符:XDocumentxTasks=newXDocument();XElementxRoot=newXElement("tasklist",newXAttribute("timestamp",lastUpdated),newXElement("lasttask",lastTask));...xTasks.Add(xRoot);xTasks.Save("tasks.xml");//直接读入,直接写回。完毕。string[]lines=File.ReadAllLines("tasks.xml");File.WriteAllLines("tasks.xml",lines);(这很好,但为了方便起见——至少你会有一个格式良好的文件上传到你的在线提供商);)以上是C#学习教程:XDocument:将XML保存到没有BOM的文件以供共享所有的内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
