使用包含&符号的URL将XML加载到XDocument

XDocument xd = XDocument.Load("http://www.google.com/ig/api?weather=vilnius&hl=lt"); 

在调用Load()方法时,&符号不是包含URL的字符串中的受支持字符。 发生此错误:

XmlException未处理:给定编码中的字符无效

如何将URL从URL加载到XDocument中,其中URL在查询字符串中有&符号?

您需要对其进行URL编码为&

 XDocument xd = XDocument.Load( "http://www.google.com/ig/api?weather=vilnius&hl=lt"); 

您可以使用WebUtility.HtmlEncode自动执行此转换; 但是,请注意,这不是该方法的预期用途。

编辑 :这里的真正问题与&符号无关,但谷歌使用自定义编码编码XML文档并且无法声明它的方式。 (只有当&符号出现在特殊情况下时才需要进行编码,例如(X)HTML的元素。 在URL中读取&符号(&),以便快速解释。)

由于XML声明未指定编码,因此XDocument.Load在内部回退到XML规范所要求的默认UTF-8编码,这与实际数据不兼容。

要解决此问题,您可以使用下面的示例手动获取原始数据并对其进行解码。 我不知道编码是否真的是Windows-1252,所以你可能需要尝试其他编码。

 string url = "http://www.google.com/ig/api?weather=vilnius&hl=lt"; byte[] data; using (WebClient webClient = new WebClient()) data = webClient.DownloadData(url); string str = Encoding.GetEncoding("Windows-1252").GetString(data); XDocument xd = XDocument.Parse(str); 

您的代码没有任何问题 – 在查询字符串中使用&是完全可以的,并且它是如何定义单独的参数。

当您查看错误时,您将看到它无法加载XML,而不是从Url查询它:

XmlException:给定编码中的字符无效。 第1行,第473位

它明确指出了查询字符串之外。

问题可能是XML响应中的“Apsiniaukę”(注意最后一个字符)……

而不是“&”使用“ & ”或“ & ”。 它会工作正常。