HTML 민첩성 팩을 사용하여 HTML에서 tbody에서 한 번에 하나의 td를 추출하는 방법

html html-agility-pack xpath

문제

아래 URL (Google 금융)에서 테이블을 구문 분석하려고합니다.

http://www.google.com/finance/historical?q=BOM:533278

닫기 열의 닫기 값만 추출하려고합니다. 하지만 XPath로 시도하면

hd.DocumentNode.SelectSingleNode("//td[@class='rgt']")

하나의 Node.innerText 자체에서 rgt와 같은 속성의 클래스 및 값으로 속성을 갖는 모든 노드를 얻고 있습니다.

나는 하나씩 가치를 필요로하며 동시에 모든 것을 요구하지는 않는다. 나는 여기서 바보 같은 짓을하고있을거야. 고맙습니다.

실제 XPath는 Firebug를 사용하여 다음과 같습니다.

/html/body/div/div/div[3]/div[2]/div/div[2]
     /div[2]/div/form/div[2]/table/tbody/tr[2]/td[5]

그러나 form 태그 뒤에 어떻게 ... HTMLagility 팩은 null 노드를 반환하고 있습니다. 이 작업을 구현하는 데 너무 오래 걸릴 것이라고 생각하지 않았습니다.

수락 된 답변

파이어 버그파이어 폭스 확장 (예 : XPather )을 사용하여 구문 분석해야하는 요소의 XPath 를 얻는 경우 XPath 에서 tbody 태그를 제거해야 할 수 있습니다.

그래서 다음과 같은 대답을보십시오. 왜 firebug가 <tbody>를 <table>에 추가합니까?

HtmlAgilityPack을 사용하는 경우 Firebug 또는 Firefox 와 관련된 다른 도구에 의해 반환 된 XPath 가 다를 수 있습니다. 파싱하는 HTML 소스가 Firefox의 HTML 소스 와 다를 수 있기 때문입니다.

때때로 Internet Explorer 8 에서 동일한 페이지를 열고 개발자 도구 (F12)를 사용 하는 것이 Firebug에서하는 작업과 동일하거나 그렇지 않은 경우 HtmlAgilityPack 페이지 에서 다운로드 할 수있는 HAP Explorer 와 같은 다른 도구를 사용하는 것이 유용 할 수 있습니다


인기 답변

그것을 할 수있는 많은 방법이 있습니다. Data td (lm 클래스와 하나의 클래스)를 기반으로하는 하나의 솔루션이 있습니다 :

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
... load the doc ...

foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//td[@class='lm']/../td[5]"))
{
    Console.WriteLine("node=" + node.InnerText);
}


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