0
我試圖使用HtmlAgilityPack解析通過網頁的HTML解析出表/行的單元格。使用HtmlAgilityPack解析帶有標題,表格,行,單元格的HTML
代碼示例幾乎可以工作,除了我在Table集合上遇到異常。我認爲這可能與Header沒有格式化爲集合有關(我無法修改HTML的源代碼)。
請幫助代碼,或請建議替代方案或變通方法。
結構是: 頭 - >表 - >行 - >細胞
有集管的集合(包含日期),包含表,其包含的行的集合的集合,並行包含一組單元格。
string html = @"
<html>
<body>
<h3>February 8, 2014</h3>
<table>
<tr>
<td><b>Site</b></td>
<td><b>ColumnA</b></td>
<td><b>ColumnB</b></td>
<td><b>ColumnC</b></td>
</tr>
<tr>
<td>SiteA</td>
<td>3</td>
<td>6</td>
<td>3</td>
</tr>
<tr>
<td>SiteB</td>
<td>4</td>
<td>6</td>
<td>2</td>
</tr>
<tr>
<td>SiteC</td>
<td>4</td>
<td>9</td>
<td>4</td>
</tr>
</table>
<h3>February 7, 2014</h3>
<table>
<tr>
<td><b>Site </b></td>
<td><b>ColumnA</b></td>
<td><b>ColumnB</b></td>
<td><b>ColumnC</b></td>
</tr>
<tr>
<td>SiteA</td>
<td>2</td>
<td>4</td>
<td>1</td>
</tr>
<tr>
<td>SiteB</td>
<td>1</td>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>SiteC</td>
<td>2</td>
<td>6</td>
<td>1</td>
</tr>
</table>
</body>
</html>
";
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
謝謝。傑克。
*「代碼示例幾乎可用」*,請提供您的代碼示例。 – Harrison