[英]C# Nested Loops
我无法进行一些循环。
我正在使用敏捷包。 我有一个包含多个链接的TXT文件(每行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;
}
}
尝试改变
memoEdit1.Text = node.ChildNodes[0].InnerHtml + "\r\n";
至
memoEdit1.Text += node.ChildNodes[0].InnerHtml + "\r\n";
您每次都会覆盖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));
如果仅在内部循环中选择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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.