2011-11-18 24 views
1

我使用html敏捷包來解析我加載的幾個文本文件。然後我將解析出的數據保存到字符串列表中以供進一步處理。然而,當我用這個方法,它永遠不會打線:方法掛起for循環,不會繼續

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框架4.

編輯贏窗體應用程序: 感謝您的幫助。

我通過它在次環路

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,但在它發生過的幾個實例。

+2

將斷點(F9)錯誤的' OurStream.Close()'方法,然後遍歷代碼。看起來似乎並不存在問題,所以它可能是你沒有展示過的東西,或者只是更微妙的東西。 –

+3

你有沒有嘗試在調試器中通過它? – Amy

+0

多次調試最終發現specContent有時會爲空,並且該方法會結束但不會返回異常。我爬行的網站動態變得難以重複和確定它。 關於爲什麼它沒有返回異常的任何想法?我知道我還沒有處理過這個。 – jordanhill123

回答

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{}塊輸出,如果需要