Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 解析XML时出错_C#_Xml_Utf 16 - Fatal编程技术网

C# 解析XML时出错

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文件的字符串内容解析到XDocument中,以便进一步处理,但不断出现以下错误:

名称不能以“.”字符开头,十六进制值0x00。第1行,位置8

我无法控制此文件。我所能做的就是从我有读取权限的网络共享中解析它。文件内容如下:

<?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));