2014-07-11 5 views
0

부모 노드에서 모든 텍스트를 포함하고있는 자식 노드를 가져 오려고합니다. 다른 말로하면 : 내가 필요한 일부 문자열을 포함하고있는 특정 자식 노드에서 검색을 시작합니다. 일단 내가 찾은 후에 동일한 Xpath 표현식과 일치하는 다른 모든 문자열을 노드에서 가져 오는 대신 동일한 레벨에서 다른 노드를 가져와야합니다. 자바를 사용하고 있습니다. 예를 들어 : 나는 IIND1000 찾는 경우텍스트가 포함 된 상위 노드 목록에서 노드 목록 가져 오기

 <table width="575" border="0" cellspacing="1" cellpadding="0"> 
       <tr> 
        <td width="39" class="back1"><b class="texto4">CRN</b></td> 
        <td width="60" class="back1"><b class="texto4">Materia</b></td> 
        <td width="53" class="back1"><b class="texto4">Secci&oacute;n</b></td> 
        <td width="55" class="back1"><b class="texto4">Cr&eacute;ditos</b></td> 
        <td width="156" class="back1"><b class="texto4">T&iacute;tulo</b></td> 
        <td width="69" class="back1"><b class="texto4">Cupo</b></td> 
        <td width="57" class="back1"><b class="texto4">Inscritos</b></td> 
        <td width="77" class="back1"><b class="texto4">Disponible</b></td> 
       </tr> 
       <tr> 
        <td width="39"><font class="texto4"> 
        10110      </font></td> 
        <td width="60"><font class="texto4"> 
        IIND1000      </font></td> 
        <td width="53"><font class="texto4"> 
        <div align="center"> 
        1      </div></font></td> 
        <td width="55"><font class="texto4"> 
        <div align="center"> 
        3      </div> 
        </font></td> 
        <td width="156"><font class="texto4"> 
        INTROD. INGEN. INDUSTRIAL      </font></td> 
        <td width="69"><font class="texto4"> 
        100      </font></td> 
        <td width="57"><font class="texto4"> 
        100      </font></td> 
        <td width="77"><font class="texto4"> 
        0      </font></td> 
       </tr> 
       </table> 

, 나는 그 TR 태그 안에 모든 TD 요소를 얻으려면 (.. 10110, IIND1000, 1, 3, 인트로드 INGEN 산업, 100, 100, 0). Jtidy에서도 가능합니까? 모든 팁이나 권장 사항? 감사.

+1

시도한 코드와 예제 XML을 추가 할 수 있습니까? – Jens

+0

죄송합니다. 방금 얻은 HTML 문서의 예제로 질문을 업데이트했습니다. 지금까지이 코드 조각을 시도했습니다 : 'XPath xpath = XPathFactory.newInstance(). newXPath(); \t \t \t XPathExpression expr = xpath.compile ("// td [@ width = '39 ']/font/text()"); \t \t \t NodeList crn = (NodeList) expr.evaluate (doc, XPathConstants.NODESET); ' 이 테이블에서 너비가 39 인 모든 노드의 텍스트를 가져옵니다. 내가 필요한 것은 발견 된 텍스트의 동일한 레벨에서 모든 노드를 얻는 것입니다 (텍스트는 사용자가 입력 한 것과 같습니다). –

+0

질문에 코드 시도를 추가하고 주석으로 포함하지 마십시오. –

답변

1

당신은 아마이 원하는 : 괄호

XPathExpression expr = 
    xpath.compile("//tr[td[normalize-space(font) = 'IIND1000']]/td/font/text()"); 

조건이 원하는 기준에 손자 노드의 존재를 확인하고만이 출력 일치하는 <tr>의 모든 손자.

+0

나는 이것을 최대한 빨리 시도 할 것이다. 감사! 편집 : 근무. 정말 감사. [10110, IIND1000, INTROD] 항목을 출력합니다. INGEN. INDUSTRIAL, 100, 100, 0, 16886, IIND1000, INTROD. INGEN. INDUSTRIAL, 100, 100, 0]. 나는 어떻게 든 6의 블록으로 결과를 나눠야 만 할 것이므로 동일한 코드로 클래스를 분리 할 수 ​​있습니다. –

+0

그 표현식이 글꼴 뒤에 div가있는 요소의 텍스트를 가져올 수없는 이유를 알고 계시겠습니까? 세 번째와 네 번째 요소. 이것에 대해 다른 질문을 게시했지만 어쩌면 알 수 있습니다 http://stackoverflow.com/questions/24668436/xpath-nodes-come-after-newline –

관련 문제