Html敏捷包-在行和列之间循环
本文关键字:之间 循环 Html | 更新日期: 2023-09-27 18:22:47
我刚刚开始使用C#语言和HtmlAgilityPack解析一些html文件。
我试图为每一行获取两列的值,以便将它们插入数据库中。但是运行以下内容:
foreach (HtmlNode row in htmlDoc.DocumentNode.SelectNodes("//tr"))
{
foreach (HtmlNode cell in row.SelectNodes("//td"))
{
Console.WriteLine(cell.InnerText);
}
}
我在遍历所有td时遇到了一个错误,而不仅仅是当前tr.中包含的td
我的html看起来像这样:
<table>
<tr>
<th align="center" width="50"><b>column 1</b></th>
<th align="center" width="210"><b>column 2</b></th>
</tr>
<tr bgcolor="#ffffff">
<td align="left"> </td>
<td align="left"></td>
</tr>
<tr bgcolor="#dddddd">
<td align="left"> </td>
<td align="left"></td>
</tr>
<tr bgcolor="#ffffff">
<td align="left"> </td>
<td align="left"></td>
</tr>
只是想让你知道我已经更新了代码,它运行良好,但看起来一点也不好:
j = htmlDoc.DocumentNode.SelectNodes("//tr").Count;
if (j != 0)
{
for (int i = 2; i < j; ++i)
{
for (int k = 1; k < 3; k++)
{
HtmlNodeCollection row = htmlDoc.DocumentNode.SelectNodes("/html/body/table/tr[" + i + "]/td[" + k + "]");
Console.WriteLine("nb or row" + row.Count);
Console.WriteLine(row[0].InnerText);
//Console.Read();
}
}
}
如果您有任何增强此代码的想法,那将是非常棒的。
谢谢,Damien
也许这个
var rows = doc.DocumentNode
.SelectNodes("//tr")
.Select((z, i) => new
{
RowNumber = i,
Cells = z.ChildNodes.Where(c => c.NodeType == HtmlNodeType.Element) })
.ToList();
rows.ForEach(row => Console.WriteLine("{0}: {1}", row.RowNumber, string.Join(", ", row.Cells.Select(z => z.InnerText))));