C#嵌套循环

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

我很难做一些循环

我用的是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;
    }
}
尝试改变

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
。。