Html Agility Pack Tables和rowspan

时间:2014-02-07 01:32:21

标签: c# html-agility-pack

我有下表:

<table>
    <tr>
        <td>Asset: 123499</td>
        <td>Unit 3A<br /></td>
        <td>12/7/2013</td>
    </tr>
    <tr>
        <tdcolspan=3>&nbsp;</td>
    </tr>
    <tr>
        <td>Asset: 123456</td>
        <td>Unit 5</td>
        <td>12/7/2013</td>
    </tr>
    <tr>
        <td rowspan=2>Asset: 123457</td>
        <td>Unit 8</td>
        <td>12/7/2013</td>
    </tr>
    <tr>
        <td>Unit 10</td>
        <td>12/7/2013</td>
    </tr>
</table>

我需要解析数据。在大多数情况下,每个资产都有一个单位,因此很容易获取数据,但在某些情况下,资产有多个单位,所以我最终得到了资产编号的行数,然后重复下一行的信息。

上表的最后两行是一个例子。我无法弄清楚如何压缩rowspan行,以便获得每行的资产编号和单个单位信息。还有一些空格行使用colspan并且不包含任何数据。

我想将它们从我正在处理的行中排除,但我不知道该怎么做。 以下是我目前使用的代码:

HtmlNode tableDirty = htmlDoc.DocumentNode.SelectNodes("//table").Last();
HtmlNodeCollection rows = tableDirty.SelectNodes("//tr");
foreach (HtmlNode t in rows)
{
    HtmlNodeCollection cols = t.SelectNodes(".//td");
    int assetNumber;
    if (Int32.TryParse(cols[2].InnerHtml, out assetNumber))
    {
        tableData.Add(new TableData
        {
            AssetId = cols[0].InnerHtml,
            Unit = cols[1].InnerHtml,)
        });
    }
}

0 个答案:

没有答案