2014-02-19 2 views
0

테이블에서 XPATH를 얻기 I 다음의 XPath 있습니다에서 /html/body/div/div/div/div[2]/div/div/div/div[3]/div/table/tbody/tr/td[2]/a웹 페이지

:

<div id="search-result-block"> 
<div class=""> 
<table class="search-result" width="100%"> 
    <tbody> 
    <tr> 
    <td class="result-num"> 
    <td class="result-header" colspan="2"> 
     <a class="srtitle" href="http://books.ioba.org/books/4359746.html">1001 Designs for  Whittling and Woodcarving</a> 
     <br> 
     <div class="srauthor">Tangerman, Elmer John </div> 
    </td> 
    </tr> 
    <tr> 
    </tbody> 
</table> 

을하고 그러나 나는 내 응용 프로그램이 나에게 널 (null) 예외를주고, 그 XPath는의 내부 HTML을 얻을 필요 여기

(내가 그것을 경로가 잘못 또는 어떤 것을 찾는 것입니다 생각) 내 현재 코드 :

HtmlAgilityPack.HtmlNode rootNode = htmlDoc.DocumentNode; 
titleBook = rootNode.SelectSingleNode(@".//table/tbody/tr/td[2]/a").InnerHtml.ToString(); 

대신 @"//table[contains(@class, 'result-header')]/a"을 사용해 보았지만 여전히 작동하지 않았습니다. 내가 뭘 잘못하고 있니? 모두

+0

td [1]을 (를) 해 보았습니까? – u84six

답변

1

모두는, 당신의 노드가

//a[@class='srtitle'] 

입니다하지만 당신의 HTML이 행동이 예측할 수없는 렌더링되는, 예를 들어, 일부 일치하는 태그를 누락 ... 정말 지저분 선택하는 가장 쉬운 방법을 생각 .

두 개의 td이 실제로 중첩 된 것으로 보이고 형제가 아니기 때문에 첫 번째 경로가 작동하지 않습니다. @"//table/tbody/tr/td/td/a"이어야합니다.

두 번째 xpath는 @"//td[@class="result-header']/a으로 간단하게 고정 될 수도 있고, @"//td[contains(@class, 'result-header')]/a"을 원할 경우 수 있습니다.

+0

위대한, 그러나 나는 테이블을 사용하는 다른 웹 사이트와 동일한 문제가 있기 때문에 xpath를 이해할 수있는 방법을 알고 싶습니다. 어떤 도움이나 링크를 부탁드립니다! :) –

+0

'[..]'는 조건을 지정하는 데 사용됩니다. 조건이 충족되는 경우에만 노드와 일치합니다. 그들은 더 많은 것을 배우고 싶다면 많은 온라인 tuto입니다! – Robin

+0

mm. 나도 알지만 문제는 웹 페이지의 해당 테이블을 둘러싼 다. 나는 이것에 대해 이미 검색을 시도했지만 유용한 정보를 찾지 못했습니다./ –