XDocument xd = XDocument.Load("http://www.google.com/ig/api?weather=vilnius&hl=lt");
在调用&
方法时,&符号Load()
不是包含URL的字符串中的受支持字符。发生此错误:
未处理XmlException:给定编码中的字符无效
如何将URL从URL加载到XDocument中,其中URL在查询字符串中有&符号?
答案 0 :(得分:8)
<击>
您需要对其进行URL编码为&
:
XDocument xd = XDocument.Load(
"http://www.google.com/ig/api?weather=vilnius&hl=lt");
您可以使用WebUtility.HtmlEncode
自动执行此转换;但是,请注意,这不是该方法的预期用途。
击>
编辑:这里的真正问题与&符号无关,但是Google使用自定义编码对XML文档进行编码并且无法声明它。 (&符号只有在特殊情境中出现时才需要进行编码,例如(X)HTML的<a href="…" />
元素。阅读Ampersands (&'s) in URLs以获得快速解释。)
由于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);
答案 1 :(得分:2)
您的代码没有任何问题 - 在查询字符串中使用&
是完全可以的,并且它是如何定义单独的参数。
当您查看错误时,您会看到它无法加载XML,而不是从Url查询错误:
XmlException:给定编码中的字符无效。第1行,第473位
明确指出查询字符串之外。
问题可能是XML响应中的“Apsiniaukę”(注意最后一个字符)......
答案 2 :(得分:0)
代替&#34;&amp;&#34;使用&#34; &
&#34;或&#34; &
&#34; 。它会工作正常。