我有2个名单:
public List<string> my_link = new List<string>();
public List<string> english_word = new List<string>();
我正在从页面中删除一些链接并将其保存到“my_link”;为此,我使用以下代码:
HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load("http://search.freefind.com/find.html?id=59478474&pid=r&ics=1&query=" + x);
HtmlNodeCollection nodes=doc.DocumentNode.SelectNodes("//font[@class='search-results']//a");
try
{
foreach (HtmlNode n in nodes)
{
link = n.InnerHtml;
link = link.Trim();
my_link.Add(link);
}
}
catch (NullReferenceException )
{
MessageBox.Show("NO link found ");
}
然后我正在废弃我删除的链接上的一些内容,并将每个链接的内容存储在english_word.Add(q);
它可以废弃除最后一个链接之外的所有链接中的内容。我的代码就像那样
foreach (string ss in my_link)
{
HtmlWeb web2 = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc2 = web2.Load(ss);
HtmlNodeCollection nodes2 = doc2.DocumentNode.SelectNodes("//table[@id='table1']//tr[position()>1]//td[position()=2]");
try
{
foreach (HtmlNode nn in nodes2)
{
q = nn.InnerText;
q = System.Net.WebUtility.HtmlDecode(q);
q = q.Trim();
english_word.Add(q);
}
}
catch (NullReferenceException ex)
{
MessageBox.Show("No english word is found ");
}
}
对于最后一个链接,它只显示“找不到英文单词”
我做错了什么?
答案 0 :(得分:0)
答案 1 :(得分:0)
首先,在这里捕捉NullReferenceException
不是一个好主意。最好检查一下你期望空值的null
。
其次,很可能你得到这个例外是因为HtmlNode.SelectNodes
方法返回null
(如果没有找到节点,则不是你所期望的空节点集合)。请参阅HTML Agility Pack Null Reference,C#/ Html Agility pack error “Value cannot be null. Parameter name: Source.”以及有关CodePlex的讨论。
因此,您可以使用以下内容代替try .. catch
块:
if (nodes2 != null)
{
foreach (HtmlNode nn in nodes2)
{
q = nn.InnerText;
q = System.Net.WebUtility.HtmlDecode(q);
q = q.Trim();
english_word.Add(q);
}
}
else
{
MessageBox.Show("No english word is found ");
}