使用包含与号的 URL 将 XML 加载到 XDocument
本文关键字:XML 加载 XDocument URL 包含 | 更新日期: 2023-09-27 18:33:17
XDocument xd = XDocument.Load("http://www.google.com/ig/api?weather=vilnius&hl=lt");
调用 Load()
方法时,与号 &
不是包含 URL 的字符串中受支持的字符。发生此错误:
Xml异常未处理:给定编码中的字符无效
如何将 XML 从 URL 加载到 XDocument 中,其中 URL 在查询字符串中有一个与号?
您需要将其 URL 编码为
&
:
XDocument xd = XDocument.Load(
"http://www.google.com/ig/api?weather=vilnius&hl=lt");
您可以使用WebUtility.HtmlEncode
自动执行此转换;但是,请注意,这不是该方法的预期用途。
编辑:这里真正的问题与&符号无关,而是与Google使用自定义编码对XML文档进行编码并且未能声明它的方式有关。(仅当 & 符号出现在特殊上下文中时才需要编码,例如 (X(HTML 的 <a href="…" />
元素。阅读 URL 中的与号 (&'s( 以获得快速说明。
由于 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 查询它:
Xml异常:给定编码中的字符无效。第 1 行,位置 473
这清楚地指向查询字符串之外。
问题可能是 XML 响应中的"Apsiniaukę"(注意最后一个字符(...
而不是"&"使用"&
"或"&
"。它会正常工作.