c#嵌套循环

本文关键字:嵌套循环 | 更新日期: 2023-09-27 18:14:07

我在做一些循环时有麻烦。

我正在使用敏捷包。我有一个TXT文件,其中有几个链接(每行1个),对于TXT想要导航到页面的每个链接,然后将其提取为xpath并写入备忘录。

我遇到的问题,代码只执行文本的最后一行的过程。我哪里错了?

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;
    }
}

c#嵌套循环

尝试更改

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