如何在XmlDocument()中从URL加载XML

20

我有这段代码:

string m_strFilePath = "http://www.google.com/ig/api?weather=12414&hl=it";

XmlDocument myXmlDocument = new XmlDocument();
myXmlDocument.LoadXml(m_strFilePath);

foreach (XmlNode RootNode in myXmlDocument.ChildNodes)
{
}

但是当我尝试执行它时,出现以下错误:

异常细节:System.Xml.XmlException:根级别处的数据无效。第1行,第1个位置。

为什么?我错在哪里了?我该如何在C#上解决这个问题?

也尝试过以下方法:

myXmlDocument.Load(m_strFilePath);    

但我收到了以下错误信息:

异常详细信息:System.Xml.XmlException: 给定编码中的字符无效。第1行,第503个位置。

2个回答

38

注意:对于大多数XML解析需求,现在最好使用XDocument

这是在告诉你m_strFilePath的值不是有效的XML。尝试:

string m_strFilePath = "http://www.google.com/ig/api?weather=12414&hl=it";
XmlDocument myXmlDocument = new XmlDocument();
myXmlDocument.Load(m_strFilePath); //Load NOT LoadXml

然而,这个操作失败了(原因未知......似乎卡在了Umidità中的à上)。下面这个可以运行(但还在努力弄清楚两种方式的区别):

var m_strFilePath = "http://www.google.com/ig/api?weather=12414&hl=it";
string xmlStr;
using(var wc = new WebClient())
{
    xmlStr = wc.DownloadString(m_strFilePath);
}
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmlStr);

它显示异常详细信息:System.Xml.XmlException:给定编码中存在无效字符。第1行,第503个位置。 - markzzz
我被难住了。一定是与编码有关,但是找不到根本原因。有人能帮忙吗? - spender
这让我感到困惑,所以我发布了一个问题:https://dev59.com/GFvUa4cB1Zd3GeqPt3u0 - spender
我相信如果您在提交之前对字符串进行URLEncode编码,它应该可以消除这个问题。System.Web.HttpUtility.UrlEncode(URL, System.Text.Encoding.UTF8); - Danimal111
你能看一下我有关 XML 响应的这个问题吗? - Moeez

6
你需要使用Load()而不是LoadXML()。LoadXML试图将一个字符串解析成XML格式,在这种情况下是你的URL。

请问您能否查看一下我关于XML响应的问题 - Moeez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接