HTMLAgilityPack 重复输出

HTMLAgilityPack repeating output

我正在使用 HTMLAgilityPack 解析来自 table 的单元格。根据我的理解,这段代码应该只输出一次 "test" 。但由于某种原因,它输出 "test" 两次,并且每 10 秒输出两次。

输出图像:https://i.gyazo.com/714a880a626c262b03df2b49dcb7711a.png

我是不是做错了什么,或者这是 HTMLAgilityPack 的问题?我已经在 Whosebug 和其他教程网站上尝试了多种解决方案来完成此操作,但我尝试过的每个解决方案都做到了这一点。我需要能够读取每个单元格,这只是我在测试是否可以不重复地获得一个输出,但我想我做不到。

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("<tr><td>test</td><td>test 2</td></tr>");

var rows = doc.DocumentNode.SelectNodes("//tr");

if (rows != null && rows.Count > 0)
{
      foreach (var row in rows)
      {
            var cells = row.SelectNodes(".//td");
            Console.WriteLine(cells[0].InnerText);
            return;
       }
}

我没有收到您描述的错误。因此,问题一定出在您用来调用您在问题中发布的内容的任何代码中。我不知道那个调用代码是什么,但下面是一些读取 table.

中所有单元格的代码

首先,table:

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(@"
    <table>
        <tr>
            <td>test</td>
            <td>test 2</td>
        </tr>
        <tr>
            <td>test 3</td>
            <td>test 4</td>
        </tr>
    </table>
");

我在你的示例中添加了一行。

现在,我假设您想将这些值放入某种强类型的 IEnumerable 中。所以这是 IEnumerable 所基于的 class:

public class StronglyTypedRow {
    public string columnOne {get;set;}
    public string columnTwo {get;set;}
}

现在是将 Html 数据读入强类型对象的代码:

var importedTable = new List<StronglyTypedRow>();

var rows = doc.DocumentNode.SelectNodes("//tr");

if (rows != null && rows.Count > 0) {

    foreach (var row in rows) {

        var cells = row.SelectNodes(".//td");

        var importedRow = 
            new StronglyTypedRow {
                columnOne = cells[0].InnerText,
                columnTwo = cells[1].InnerText
            };

        importedTable.Add(importedRow);

    }
}

如果您想在控制台中阅读它:

for(var r = 0; r < importedTable.Count(); r++) {
    var ir = importedTable[r];
    Console.WriteLine(
        "Row " + r + 
        " | Column 1 = " + ir.columnOne + 
        ", Column 2 = " + ir.columnTwo 
    );
}

希望对您有所帮助。