如何使用 Html Agility Pack 查找 table 的最后一列

How to find last column of a table using Html Agility Pack

我有一个 table 这样的:

<table border="0" cellpadding="0" cellspacing="0" id="table2">
    <tr>
        <th>Name
        </th>
        <th>Age
        </th>
    </tr>
    <tr>
        <td>Mario
        </td>
        <th>Age: 78
        </td>
    </tr>
    <tr>
        <td>Jane
        </td>
        <td>Age: 67
        </td>
    </tr>
    <tr>
        <td>James
        </td>
        <th>Age: 92
        </td>
    </tr>
</table>

我想使用 Html Agility Pack 从所有行中获取最后一个 td
到目前为止,这是我的 C# 代码:

await page.GoToAsync(NumOfSaleItems, new NavigationOptions
{
    WaitUntil = new WaitUntilNavigation[] { WaitUntilNavigation.DOMContentLoaded }
});
var html4 = page.GetContentAsync().GetAwaiter().GetResult();
var htmlDoc4 = new HtmlDocument();
htmlDoc4.LoadHtml(html4);
var SelectTable = htmlDoc4.DocumentNode.SelectNodes("/html/body/div[2]/div/div/div/table[2]/tbody/tr/td[1]/div[3]/div[2]/div/table[2]/tbody/tr/td[4]");
if (SelectTable.Count == 0)
{
    continue;
}
else
{
    foreach (HtmlNode row in SelectTable)//
    {
        string value = row.InnerText;
        value = value.ToString();
        var firstSpaceIndex = value.IndexOf(" ");
        var firstString = value.Substring(0, firstSpaceIndex);
        LastSellingDates.Add(firstString);
    }                                            
}

如何只获取 table 的最后一列?

我想你想要的 XPath 是://table[@id='table2']//tr/td[last()].

//table[@id='table2'] 在文档中的任意位置按 ID 查找 table。这比从根开始的长路径更可取,因为 table ID 比 HTML 结构的其余部分更不可能更改。

//tr 获取 table 中的后代行。我使用了两个斜杠,以防在实际的 HTML.

中可能有中间的 <tbody> 元素

/td[last()] 获取每行中的最后一个 <td>

从那里你只需要 select 每个 <td>InnerText

var tds = htmlDoc.DocumentNode.SelectNodes("//table[@id='table2']//tr/td[last()]");
var values = tds?.Select(td => td.InnerText).ToList() ?? new List<string>();

此处的工作演示:https://dotnetfiddle.net/7I8yk1