2016-10-21 327 views
0

我有麻煩做一些循環。C#嵌套循環

我正在使用agilitypack。我有一個帶有幾個鏈接(每行1個)的TXT文件,並且對於每個txt要導航到頁面的鏈接,然後解壓縮到xpath中並寫入備忘錄。

我遇到的問題是,代碼只執行txt最後一行的過程。我錯在哪裏?

var Webget = new HtmlWeb(); 
foreach (string line in File.ReadLines("c:\\test.txt")) 
{ 
    var doc = Webget.Load(line); 
    foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//*[@id='title-article']")) 
    { 
     memoEdit1.Text = node.ChildNodes[0].InnerHtml + "\r\n"; 
     break; 
    } 
} 
+0

爲什麼,如果你在它使用'break'使用嵌套循環.. –

回答

4

嘗試改變

memoEdit1.Text = node.ChildNodes[0].InnerHtml + "\r\n"; 

memoEdit1.Text += node.ChildNodes[0].InnerHtml + "\r\n"; 
+0

謝謝,它的工作,沒有注意到這個細節的權利。 –

+0

@KawyllainyVi歡迎,高興地幫助:D – tym32167

2

你覆蓋每一次memoEdit1.Text。嘗試

memoEdit1.Text += node.ChildNodes[0].InnerHtml + "\r\n"; 

代替 - 注意+=代替=,其中每次添加新的文本。順便說一句,不斷追加字符串並不是最好的方法。像這樣的東西可能會更好:

var Webget = new HtmlWeb(); 
var builder = new StringBuilder(); 
foreach (string line in File.ReadLines("c:\\test.txt")) 
{ 
    var doc = Webget.Load(line); 
    foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//*[@id='title-article']")) 
    { 
     builder.AppendFormat("{0}\r\n", node.ChildNodes[0].InnerHtml); 
     break; 
    } 
} 
memoEdit1.Text = builder.ToString(); 

或者,使用LINQ:

var Webget = new HtmlWeb(); 
memoEdit1.Text = string.Join(
    "\r\n", 
    File.ReadAllLines("c:\\test.txt") 
     .Select (line => Webget.Load(line).DocumentNode.SelectNodes("//*[@id='title-article']").First().ChildNodes[0].InnerHtml)); 
0

如果你只在內部循環中選擇1個節點,然後使用SelectSingleNode相反。此外,在一個迴路連接字符串時,更好的做法是使用StringBuilder

StringBuilder builder = new StringBuilder(); 

var Webget = new HtmlWeb(); 
foreach (string line in File.ReadLines("c:\\test.txt")) 
{ 
    var doc = Webget.Load(line); 
    builder.AppendLine(doc.DocumentNode.SelectSingleNode("//*[@id='title-article']").InnerHtml); 
} 

memoEdit1.Text = builder.ToString(); 

使用LINQ它看起來就像這樣:

var Webget = new HtmlWeb(); 
var result = File.ReadLines("c:\\test.txt") 
    .Select(line => Webget.Load(line).DocumentNode.SelectSingleNode("//*[@id='title-article']").InnerHtml)); 

memoEdit1.Text = string.Join(Environment.NewLine, result);