我多次使用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]");
然后,我想计算第一个表中的元素。
foreach (HtmlNode tableRow in node.SelectNodes("//tbody//tr"))
{
size = size + 1;
}
结果总是8而不是4。
请帮忙:/
非常感谢。
答案 0 :(得分:1)
您对tr
代码的查询不正确。您正在使用双斜杠启动它,这意味着该查询将在整个文档上执行。如果需要查询子节点,则需要从查询中删除该双斜杠
node.SelectNodes("tbody//tr")
此外,您只需一行代码即可获得所需的数量
htmlDoc.DocumentNode.SelectNodes("//table[@class='tableClass'][1]//tbody//tr").Count
答案 1 :(得分:0)
1)如果要获取特定节点的子节点,请不要在XPath中使用//
。请改用.//
。不要在XPath中的子节点前面加//
:
var trNodes=node.SelectNodes(".//tr");