2012-10-03 2 views
0

HTML 민첩성 팩을 사용하여 일부 HTML을 구문 분석하려고합니다. 다음 코드 스 니펫은 필자가 필요로하는 정보가 들어있는 테이블 요소를 선택하지만 더 깊이 파고 들어야합니다.NEXT <td> 요소는 어떻게 선택합니까?

테이블의 InnerHtml을 얻은 후에는 innertext 값이 "Field # 2"인 <td>을 찾을 계획입니다. 하지만 다음으로 NEXT <td>의 innertext를 선택해야합니다. 이 예제에서 값 110이 필요합니다. 어떻게해야합니까? 주어진 텍스트로 td 모든 노드를 찾아 -

doc.DocumentNode.SelectNodes(
    "//table[contains(@class,'data')]/tr/" + 
     "td[/strong/text()='Field #2:']" + 
     "/following-sibling:td"); 

본질적 : 민첩성 팩을 지원하지만, XPath는 당신이 /following-sibling을 사용하여 다음 형제를 조회 할 수

foreach (var x in doc.DocumentNode.SelectNodes("//table[contains(@class,'data')]")) 
{ 
    // psuedo code - search for td and use "contains" on the inner text/html. 
    // Then, grab the next td inner html. 

    Console.WriteLine(x.InnerHtml); 
} 


    <tr> 
    <td width="158"><strong>Field #1:</strong></td> 
    <td width="99">1</td> 
    <td width="119"><strong>Field #2:</strong></td> 
    <td width="176">110</td> 
    </tr> 
    <tr> 
    <td width="158"><strong>Field #3:</strong></td> 
    <td width="99">85</td> 
    <td width="119"><strong>Field #4:</strong></td> 
    <td width="176">-259.34</td> 
    </tr> 
    <tr> 
    <td width="158"><strong>Field #5:</strong></td> 
    <td width="99">1</td> 
    <td width="119"><strong>Field #6:</strong></td> 
    <td width="176">110</td> 
    </tr> 
    <tr> 
    <td width="158"><strong>Field #7:</strong></td> 
    <td width="99">12</td> 
    <td width="119"><strong>Field #8:</strong></td> 
    <td width="176">123.23</td> 
    </tr> 

답변

1

이 코드는 원하는 td 행을 반환합니다.

//<td width="176">110</td> 
var td = x.SelectNodes("//td").SkipWhile(g => !g.InnerText.Contains("Field #2:")).Select(s => s).Skip(1).FirstOrDefault(); 
0

확실하지 않음 다음 형제 인 td 노드를주세요.

+0

거의 정확해야합니다. '.' '/ strong /'와 'following-sibling'앞에 ':'가 두 개 있어야합니다. 그렇다면 잘 작동합니다. – shriek

관련 문제