为什么当包括XML标头时,C#XmlDocument.LoadXml(string)失败?
任何人都有任何想法为什么下面的代码示例失败与一个XmlException“根级别的数据无效。行1,位置1。
var body = "<?xml version="1.0" encoding="utf-16"?><Report> ......" XmlDocument bodyDoc = new XmlDocument(); bodyDoc.LoadXml(body);
背景
虽然你的问题确实有编码设置为UTF-16,你没有正确转义的字符串,所以我不知道你是否,事实上,准确地将字符串转置到你的问题。 我遇到了同样的例外:
但是,我的代码看起来像这样: string xml = "<?xml version="1.0" encoding="utf-8" ?>n<event>This is a Test</event>"; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xml); 问题 问题是字符串在.NET内部存储为UTF-16,但是XML文档头中指定的编码可能不同。例如。: <?xml version="1.0" encoding="utf-8"?> 从String here的MSDN文档:
这意味着当你传递XmlDocument.LoadXml()你的字符串与XML标题,它必须说,编码是UTF-16。否则,实际底层编码将不匹配报头中报告的编码,并将导致抛出XmlException。 解决方案 这个问题的解决方案是确保在传递Load或LoadXml方法时使用的编码与您在XML标题中说的一致。在上面的示例中,将XML标题更改为状态UTF-16或将输入编码为UTF-8,并使用XmlDocument.Load methods之一。 下面是示例代码演示如何使用MemoryStream构建一个XmlDocument使用一个字符串定义一个UTF-8编码XML文档(当然,存储一个UTF-16的.NET字符串)。 string xml = "<?xml version="1.0" encoding="utf-8" ?>n<event>This is a Test</event>"; // Encode the XML string in a UTF-8 byte array byte[] encodedString = Encoding.UTF8.GetBytes(xml); // Put the byte array into a stream and rewind it to the beginning MemoryStream ms = new MemoryStream(encodedString); ms.Flush(); ms.Position = 0; // Build the XmlDocument from the MemorySteam of UTF-8 encoded bytes XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(ms); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |