加载XML到一个XDocument用含有符号的URL(Loading XML to an XDocu

2019-06-24 04:49发布

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

与号&不是在一个字符串调用时含有一个URL所支持字符Load()方法。 出现此错误:

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

你如何从URL加载XML到其中的URL在查询字符串的符号一个XDocument?

Answer 1:

你需要URL编码它&

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

你也许能够逃脱使用WebUtility.HtmlEncode自动执行此转换; 但是,要小心,这是不是达到预定可使用该方法的。

编辑 :在这里真正的问题无关,与符号,但与谷歌的方法是使用自定义编码编码XML文档和未申报的。 (&符号只需要进行编码时发生中的特殊背景下,他们如<a href="…" />的元素(X)HTML阅读的网址符号(&的)一个快速的解释。)

由于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);


Answer 2:

没有什么不对您的代码-这是完全可以拥有&在查询字符串,它是独立的参数是如何定义的。

当你看到错误,你会看到,它无法加载XML,而不是从URL查询它:

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

其中明确指出您的查询字符串之外。

这个问题可能是“Apsiniaukę”(通知最后一个字符)的XML响应...



Answer 3:

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



文章来源: Loading XML to an XDocument with a URL containing an ampersand