我正在使用html agility pack来解析我加载的几个文本文件。然后我将我解析的数据保存到字符串列表中以供进一步处理。但是,当我使用这种方法时,它永远不会出现这一行:
MessageBox.Show("test");
此外,如果我在此方法后面包含任何其他代码,则不会触发任何代码。
有没有人对我的错误有任何建议?
整个方法包括在下面:
private void ParseOutput()
{
nodeDupList = new List<string>();
StreamWriter OurStream;
OurStream = File.CreateText(dir + @"\CombinedPages.txt");
OurStream.Close();
for (int crawl = 1; crawl <= crawlPages.Length; crawl++)
{
var web = new HtmlWeb();
var doc = web.Load(dir + @"\Pages" + crawl.ToString() + ".txt");
var nodeCount = doc.DocumentNode.SelectNodes(@"/html[1]/body[1]/div[1]/table[3]/tbody[1]/tr[td/@class=""style_23""]");
int nCount = nodeCount.Count;
for (int a = 3; a <= nCount; a++)
{
var specContent = doc.DocumentNode.SelectNodes(@"/html[1]/body[1]/div[1]/table[3]/tbody[1]/tr[" + a + @"]/td[3]/div[contains(@class,'style_24')]");
foreach (HtmlNode node in specContent)
{
nodeDupList.Add(node.InnerText + ".d");
}
}
}
MessageBox.Show("test");
}
我创建了一个抓取工具,可以将多个html页面保存到文本中,并使用此方法单独解析它们。 我只是使用MessageBox来表明它不会继续“for循环”。我在我的解决方案中调用了多个方法,它不会迭代它们。
该应用程序是针对.Net Framework 4的Win Forms应用程序。
修改 谢谢你的帮助。
我通过调试器重新运行后发现它有时会在循环中崩溃
for (int a = 3; a <= nCount; a++)
{
var specContent = doc.DocumentNode.SelectNodes(@"/html[1]/body[1]/div[1]/table[3]/tbody[1]/tr[" + a + @"]/td[3]/div[contains(@class,'style_24')]");
foreach (HtmlNode node in specContent)
{
nodeDupList.Add(node.InnerText + ".d");
}
}
当var specContent为null时。
没有生成异常;方法刚刚结束。
由于网站是动态的,我正在抓取它很少返回null,但在几个实例上它已经发生了。
答案 0 :(得分:0)
解决方案,对于任何可能需要这个的人来说,检查是否
for (int a = 3; a <= nCount; a++)
{
var specContent = doc.DocumentNode.SelectNodes(@"/html[1]/body[1]/div[1]/table[3]/tbody[1]/tr[" + a + @"]/td[3]/div[contains(@class,'style_24')]");
if(specContent !=null) //added this check for null
{
foreach (HtmlNode node in specContent)
{
nodeDupList.Add(node.InnerText + ".d");
}
}
}
如果需要,我也可以使用try{} catch{}
块来输出错误