如何使用 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
我有一个 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