2016-10-21 264 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);