C# 将XML加载到包含符号的URL的XDocument

C# 将XML加载到包含符号的URL的XDocument,c#,linq-to-xml,C#,Linq To Xml,调用Load()方法时,在包含URL的字符串中,符号&不是受支持的字符。出现以下错误: XmlException未处理:给定编码中的字符无效 如何将XML从URL加载到一个XDocument中,而该URL在查询字符串中有一个符号? 您需要将其URL编码为&: XDocument xd = XDocument.Load("http://www.google.com/ig/api?weather=vilnius&hl=lt"); 您可以使用WebUtility.HtmlEncode自

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

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

如何将XML从URL加载到一个XDocument中,而该URL在查询字符串中有一个符号?

您需要将其URL编码为
&

XDocument xd = XDocument.Load("http://www.google.com/ig/api?weather=vilnius&hl=lt");
您可以使用
WebUtility.HtmlEncode
自动执行此转换;但是,请注意,这不是该方法的预期用途。

编辑:这里真正的问题与符号无关,而是与Google使用自定义编码对XML文档进行编码的方式有关,并且没有声明它。(只有当符号出现在特殊上下文中时,才需要对其进行编码,例如
,以便快速解释。)

由于XML声明没有指定编码,
XDocument.Load
在内部按照XML规范的要求返回默认UTF-8编码,这与实际数据不兼容

为了避免这个问题,您可以获取原始数据并使用下面的示例手动解码。我不知道编码是否真的是Windows-1252,所以您可能需要尝试一下其他编码

XDocument xd = XDocument.Load(
    "http://www.google.com/ig/api?weather=vilnius&hl=lt");
您需要将其URL编码为
&

XDocument xd = XDocument.Load("http://www.google.com/ig/api?weather=vilnius&hl=lt");
您可以使用
WebUtility.HtmlEncode
自动执行此转换;但是,请注意,这不是该方法的预期用途。

编辑:这里真正的问题与符号无关,而是与Google使用自定义编码对XML文档进行编码的方式有关,并且没有声明它。(只有当符号出现在特殊上下文中时,才需要对其进行编码,例如
,以便快速解释。)

由于XML声明没有指定编码,
XDocument.Load
在内部按照XML规范的要求返回默认UTF-8编码,这与实际数据不兼容

为了避免这个问题,您可以获取原始数据并使用下面的示例手动解码。我不知道编码是否真的是Windows-1252,所以您可能需要尝试一下其他编码

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

您的代码没有问题-在查询字符串中有
&
是完全可以的,这是定义独立参数的方式

查看错误时,您会发现它无法加载XML,而不是从Url查询:

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

这显然超出了查询字符串的范围


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

您的代码没有问题-在查询字符串中有
&
是完全可以的,这是如何定义单独的参数

查看错误时,您会发现它无法加载XML,而不是从Url查询:

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

这显然超出了查询字符串的范围


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

而不是“&”使用“
&
”或“
&;
”。它会很好的工作

使用“
&
”或“
&;
”,而不是“&”。它会很好的工作

-1。这回答了不同的问题——“如果我的查询参数包含“and”怎么办”,这与OP的问题不同。@AlexeiLevenkov:我相信你可能弄错了。OP引用的
XmlException
错误是由未编码的“与”符号引起的,我在回答中解释了解决方法。这是他们隐含的假设,即即使编码,符号也不能传递给
Load
,这是不正确的。不太可能:)OP已经问了一个问题,为什么url的构造方式不能给出预期的结果-。请注意,您的建议将第二个查询参数从“hl=…”更改为“amp;hl=…”,这显著修改了Url。问题不是我回答了另一个问题,而是OP的问题(“如何将XML从Url加载到一个XDocument,其中Url在查询字符串中有一个符号?”)基于不正确的前提。以下是完整答案的+1。我同意OP的问题不清楚(或者与问题无关)。也许加上你的建议完全改变了查询的解释会阻止OP走上错误的道路。这回答了不同的问题——“如果我的查询参数包含“and”怎么办”,这与OP的问题不同。@AlexeiLevenkov:我相信你可能弄错了。OP引用的
XmlException
错误是由未编码的“与”符号引起的,我在回答中解释了解决方法。这是他们隐含的假设,即即使编码,符号也不能传递给
Load
,这是不正确的。不太可能:)OP已经问了一个问题,为什么url的构造方式不能给出预期的结果-。请注意,您的建议将第二个查询参数从“hl=…”更改为“amp;hl=…”,这显著修改了Url。问题不是我回答了另一个问题,而是OP的问题(“如何将XML从Url加载到一个XDocument,其中Url在查询字符串中有一个符号?”)基于不正确的前提。以下是完整答案的+1。我同意OP的问题不清楚(或者与问题无关)。也许添加您的建议完全改变查询的解释会阻止OP走错路线。谢谢,如何解决这个问题,我的意思是像
ę
这样的特殊符号,您可以将流作为数据而不是XML查询,然后尝试使用UTF-16编码加载