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
);
}
希望对您有所帮助。
我正在使用 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
);
}
希望对您有所帮助。