C# HTMLAgilityPack 计算第一个 table 的 tr 个元素
C# HTMLAgilityPack count tr elements of first table
我已经多次使用 HTMLAgilityPack。
但是我没有解决以下问题的方法:
<table class="tableClass">
<thead>...</thead>
<tbody>
<tr>...</tr>
<tr>...</tr>
<tr>...</tr>
<tr>...</tr>
</tbody>
</table>
<table class="tableClass">
<thead>...</thead>
<tbody>
<tr>...</tr>
<tr>...</tr>
<tr>...</tr>
<tr>...</tr>
</tbody>
</table>
所以,这是 HTML 代码。
我可以通过这个找到第一个 "tableClass":
HtmlNode node= htmlDoc.DocumentNode.SelectSingleNode("//table[@class='tableClass'][1]");
然后,我想统计第一个table内的元素。
foreach (HtmlNode tableRow in node.SelectNodes("//tbody//tr"))
{
size = size + 1;
}
结果总是 8 而不是 4。
请帮忙:/
非常感谢。
1) 如果要获取特定节点的子节点,请不要在 XPath 中使用 //
。使用 .//
代替。不要在 XPath 中的子节点前加上 //
:
var trNodes=node.SelectNodes(".//tr");
您对 tr
标签的查询不正确。您以双斜杠开头,这意味着该查询将在整个文档上执行。如果您需要查询子节点,则需要从查询中删除双斜杠
node.SelectNodes("tbody//tr")
此外,您只需一行代码即可获得所需的计数
htmlDoc.DocumentNode.SelectNodes("//table[@class='tableClass'][1]//tbody//tr").Count
我已经多次使用 HTMLAgilityPack。 但是我没有解决以下问题的方法:
<table class="tableClass">
<thead>...</thead>
<tbody>
<tr>...</tr>
<tr>...</tr>
<tr>...</tr>
<tr>...</tr>
</tbody>
</table>
<table class="tableClass">
<thead>...</thead>
<tbody>
<tr>...</tr>
<tr>...</tr>
<tr>...</tr>
<tr>...</tr>
</tbody>
</table>
所以,这是 HTML 代码。
我可以通过这个找到第一个 "tableClass":
HtmlNode node= htmlDoc.DocumentNode.SelectSingleNode("//table[@class='tableClass'][1]");
然后,我想统计第一个table内的元素。
foreach (HtmlNode tableRow in node.SelectNodes("//tbody//tr"))
{
size = size + 1;
}
结果总是 8 而不是 4。
请帮忙:/
非常感谢。
1) 如果要获取特定节点的子节点,请不要在 XPath 中使用 //
。使用 .//
代替。不要在 XPath 中的子节点前加上 //
:
var trNodes=node.SelectNodes(".//tr");
您对 tr
标签的查询不正确。您以双斜杠开头,这意味着该查询将在整个文档上执行。如果您需要查询子节点,则需要从查询中删除双斜杠
node.SelectNodes("tbody//tr")
此外,您只需一行代码即可获得所需的计数
htmlDoc.DocumentNode.SelectNodes("//table[@class='tableClass'][1]//tbody//tr").Count