好的,我有兴趣尝试在这些标签之间找到文本:
<font color="#00006b">Aa Megami-sama (OAV 2011)</font>
而且我有一个名称在相同标签中的列表,我想抓住它们并将它们放入动态数组列表中。
我曾尝试使用 HTMLAgilityPack 来执行此操作,但是当我运行我的程序时会发生这种情况:
LoadHtml() 方法将 HTML 作为输入,而不是 URL。您需要自己获取 HTML。
例如:
using (var webclient = new WebClient())
{
var html = webclient.DownloadString("http://www.animenewsnetwork.com/encyclopedia/anime.php?list=A");
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
var node = doc.DocumentNode.SelectSingleNode("//font");
Console.WriteLine(node.InnerText);
Console.ReadKey();
}
你SelectSingleNode()
的返回null
值。所以你需要对最后一行做一个“空检查”。这样做:
if(node != null)
{
Messagebox.Show(node.InnerText);
}
首先,通过这种方式使用LoadHtml方法获取html文件数据。
var webclient = new WebClient();
HTMLAgilityPack.HtmlDocument doc = new HTMLAgilityPack.HtmlDocument();
doc.LoadHtml(webClient.DownloadString(@"http://www.animenewsnetwork.com/encyclopedia/anime.php?list=A"));
现在,由于可能的元数据字符集可能无效,有时这可能无法正常工作。在这种情况下,您可以在那里使用答案,解决方法是手动读取响应(通过HttpWebRequest
和HttpWebResponse
)。
接下来,您可能需要检测和处理其他解析错误(包括上述错误)(如果有的话),如此处所述:
if (doc.ParseErrors!=null && doc.ParseErrors.Count>0)
{
// Handle any parse errors as required
}
else
{
if (doc.DocumentNode != null)
{
HtmlNode fontNode = doc.DocumentNode.SelectSingleNode("//font");
if (fontNode != null)
{
// Do something with fontNode
MessageBox.Show(fontNode.InnerText);
}
}
}