网站的建设与运营专业,网络工程建设,界面设计与制作专业学什么,网站结构怎么优化最近做一个XML的生成与导入功能#xff0c;生成的XML经过语法验证和Schema验证#xff0c;均无错误#xff0c;编码方式也是所要求UTF-8#xff0c;可是导入时却一直提示#xff1a; Error on line 1 of document : Content is not allowed in prolog. Nested exception:…最近做一个XML的生成与导入功能生成的XML经过语法验证和Schema验证均无错误编码方式也是所要求UTF-8可是导入时却一直提示 Error on line 1 of document : Content is not allowed in prolog. Nested exception: Content is not allowed in prolog.由于导入的系统时税务部门的网站无从查看代码跟踪异常所有的信息只这一句莫名其妙的错误提示。 搜索后得知可能是因为BOM引起的。 什么是BOM呢 BOMByte Order Mark中文名字节顺序标记。UCS规范建议在传输字节流前先传输BOM来判断字节顺序。其实UTF-8是不需要用BOM来表明字节顺序的但是可以用BOM来表明编码方式。BOM的UTF-8编码是EF BB BF所以呢如果接受者收到EF BB BF开头的字节流就说明它是UTF-8编码了。 由此可见对于UTF-8来说BOM是可有可无的可是有的XML解析方式不认这个BOM所以就报错了。 怎么判断XML是否含有BOM呢 用UltraEdit或者其他可以带有十六进制编辑功能的软件打开XML如果开头有EF BB BF就说明含有BOM了。 怎样去掉BOM呢 可以用UltraEdit或者EmEditor打开XML然后另存为保存的时候有选项是以无BOM的UTF-8保存还是以有BOM的UTF-8保存。 怎样生成无BOM的XML呢 要去掉生成的XML的BOM要从源头上解决不可能让用户每次生成XML后手动编辑去掉BOM后再导入。 之前生成XML的代码是 XmlWriterSettings settings new XmlWriterSettings();settings.Encoding System.Text.Encoding.GetEncoding(utf-8);XmlWriter writer XmlWriter.Create(pathName, settings); 修改之后 XmlWriterSettings settings new XmlWriterSettings();settings.Encoding new UTF8Encoding(false);XmlWriter writer XmlWriter.Create(pathName, settings); 这样用XmlWriter生成的XML就是不带BOM的了导入成功不再报错。 转载于:https://www.cnblogs.com/niuniu1985/archive/2011/07/14/2106439.html