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;
}
결과는 항상 4 대신 8입니다.
도와주세요 :/
고맙습니다.
1) 특정 노드의 하위 노드를 가져 오려면 XPath에서 //
를 사용하지 마십시오. 대신 .//
사용하십시오. //
를 사용하여 XPath의 하위 노드를 선행하지 마십시오.
var trNodes=node.SelectNodes(".//tr");
tr
태그에 대한 쿼리가 올바르지 않습니다. 이중 슬래시로 시작하면 쿼리가 전체 문서에서 실행됩니다. 하위 노드를 쿼리해야하는 경우 쿼리에서 이중 슬래시를 제거해야합니다.
node.SelectNodes("tbody//tr")
또한 단 한 줄의 코드로 필요한 수를 얻을 수 있습니다.
htmlDoc.DocumentNode.SelectNodes("//table[@class='tableClass'][1]//tbody//tr").Count