C # HTMLAgilityPack 첫 번째 테이블의 tr 요소

c# html-agility-pack

문제

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


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.