2016-10-21 7 views
0

いくつかのループを作成するのに問題があります。C#入れ子ループ

私はagilitypackを使用しています。私はいくつかのリンク(1行に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

はなぜ、ネストされたループを使用しても、ループ内の文字列を連結するより良い練習がStringBuilderを使用することです.. –

答えて

4

はあなたがmemoEdit1.Textたびに上書きしている

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

ありがとう、それは働いた、この細部の権利に注意を払っていなかった。 –

+0

@KawyllainyViようこそ、幸せに助けてください:D – tym32167

2

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

を変更してみてください。

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

代わりに試してみてください - 新しいテキストを毎回追加代わり=+=を、注意してください。

ちなみに、常に文字列を一緒に追加することは、実際には最良の方法ではありません。 LINQを使用して、

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(); 

または::このような何かが良いかもしれない

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を使用しています。それはこのようになりますLINQを使用して

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(); 

:あなたはそれで `break`を使用している場合

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); 
関連する問題