C#嵌套循环
我很难做一些循环 我用的是agilitypack。我有一个包含多个链接(每行1个)的TXT文件,对于TXT想要导航到页面的每个链接,然后将其提取为xpath格式并写入备忘录 我遇到的问题是,代码只执行txt最后一行的过程。我错在哪里C#嵌套循环,c#,nested,html-agility-pack,C#,Nested,Html Agility Pack,我很难做一些循环 我用的是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 (H
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));
您每次都在覆盖
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));
如果只选择内部循环中的一个节点,则使用
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);
如果只选择内部循环中的一个节点,则使用
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);
谢谢,它起作用了,没有注意到这个细节。KawyllainyVi欢迎,很乐意帮助:d谢谢,它起作用了,没有注意到这个细节。KawyllainyVi欢迎,很乐意帮助:d如果你在其中使用
break
,为什么要使用嵌套循环。如果你在其中使用break
。。