C# 解析XML时出错
我试图将包含特殊字符的XML文件的字符串内容解析到XDocument中,以便进一步处理,但不断出现以下错误: 名称不能以“.”字符开头,十六进制值0x00。第1行,位置8 我无法控制此文件。我所能做的就是从我有读取权限的网络共享中解析它。文件内容如下:C# 解析XML时出错,c#,xml,utf-16,C#,Xml,Utf 16,我试图将包含特殊字符的XML文件的字符串内容解析到XDocument中,以便进一步处理,但不断出现以下错误: 名称不能以“.”字符开头,十六进制值0x00。第1行,位置8 我无法控制此文件。我所能做的就是从我有读取权限的网络共享中解析它。文件内容如下: <?xml version="1.0" encoding="utf-16"?> <ns0:SAEErr xmlns:ns0="http://xyz"> <ErrorInformation>olsfdhfaskl
<?xml version="1.0" encoding="utf-16"?>
<ns0:SAEErr xmlns:ns0="http://xyz">
<ErrorInformation>olsfdhfaskldhfksajdfkajsf</ErrorInformation>
<OriginalMessage>慐浹湥䥴Ɽ慐浹湥却慴畴䍳摯ⱥ慐</OriginalMessage>
</ns0:SAEErr>
StringBuilder sb = new StringBuilder();
sb.Append("<root>");
sb.Append(FileUtil.ReadFileContent(fileName));
sb.Append("</root>");
return XDocument.Parse(sb.ToString());
谢谢你,亨克 使用
XElement.Load()
读取文件时,我只能在处理行中将utf-16
更改为utf-8
后再现您的错误。所以这确实是一个编码错误
编辑:
您的代码:
StringBuilder sb = new StringBuilder();
sb.Append("<root>");
sb.Append(FileUtil.ReadFileContent(fileName)); // Encoding ??
sb.Append("</root>");
return XDocument.Parse(sb.ToString());
显示用于加载XML文档的代码。另外,请告诉我们您是如何确认它确实在UTF-16中的。是的,请向我们显示XML文件的十六进制转储。+Jon Skeet:我不拥有或控制该文件。我想知道utf-16位。为什么要在完全有效的xml周围添加根元素?在这种情况下,它将打破它,因为您的xml声明将不再位于顶部。嗨,Henk,当我尝试将您的代码片段用于编码设置为UTF-16的xml文件时,我遇到以下错误:“无法将非空白字符添加到内容中”。您注意到我上次的编辑吗?关于
新XDocument
StringBuilder sb = new StringBuilder();
sb.Append("<root>");
sb.Append(FileUtil.ReadFileContent(fileName)); // Encoding ??
sb.Append("</root>");
return XDocument.Parse(sb.ToString());
XElement body = XElement.Load(fileName);
XDocument doc = new XDocument(new XElement( "root", body));