我试图使用HtmlAgilityPack解析通过网页的HTML解析出表/行的单元格。使用HtmlAgilityPack解析带有标题,表格,行,单元格的HTML
代码示例几乎可以工作,除了我在Table集合上遇到异常。我认为这可能与Header没有格式化为集合有关(我无法修改HTML的源代码)。
请帮助代码,或请建议替代方案或变通方法。
结构是: 头 - >表 - >行 - >细胞
有集管的集合(包含日期),包含表,其包含的行的集合的集合,并行包含一组单元格。
string html = @"
February 8, 2014
Site | ColumnA | ColumnB | ColumnC |
SiteA | 3 | 6 | 3 |
SiteB | 4 | 6 | 2 |
SiteC | 4 | 9 | 4 |
February 7, 2014
Site | ColumnA | ColumnB | ColumnC |
SiteA | 2 | 4 | 1 |
SiteB | 1 | 1 | 2 |
SiteC | 2 | 6 | 1 |
";
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
foreach (HtmlNode header in doc.DocumentNode.SelectNodes("//h3"))
{
string headerDate = header.InnerText;
foreach (HtmlNode table in header.SelectNodes("table")) //System.NullReferenceException
{
foreach (HtmlNode row in table.SelectNodes("tr"))
{
Console.Write(headerDate);
foreach (HtmlNode cell in row.SelectNodes("td"))
{
Console.Write("\t" + cell.InnerText);
}
Console.WriteLine();
}
}
}
预期结果:
February 8, 2014 Site ColumnA ColumnB ColumnC
February 8, 2014 SiteA 3 6 3
February 8, 2014 SiteB 4 6 2
February 8, 2014 SiteC 4 9 4
February 7, 2014 Site ColumnA ColumnB ColumnC
February 7, 2014 SiteA 2 4 1
February 7, 2014 SiteB 1 1 2
February 7, 2014 SiteC 2 6 1
谢谢。杰克。
2014-02-14
Jake
+1
*“代码示例几乎可用”*,请提供您的代码示例。 –