2012-02-28 3 views
5

웹 페이지에서 정보를 검색하는 Java 응용 프로그램을 만들려고합니다.xpath/htmlwebunit을 사용하여 <td> 태그의 값을 얻는 방법

<TABLE CLASS="datadisplaytable" width = "100%"> 
<TR> 
    <TD CLASS="dddead">&nbsp;</TD> 
    <TH CLASS="ddheader" scope="col" ><SPAN class="fieldlabeltext">Capacity</SPAN></TH> 
    <TH CLASS="ddheader" scope="col" ><SPAN class="fieldlabeltext">Actual</SPAN></TH> 
    <TH CLASS="ddheader" scope="col" ><SPAN class="fieldlabeltext">Remaining</SPAN></TH> 
</TR> 
<TR> 
    <TH CLASS="ddlabel" scope="row" ><SPAN class="fieldlabeltext">Seats</SPAN></TH> 
    **<TD CLASS="dddefault">46</TD>** 
    <TD CLASS="dddefault">46</TD> 
    <TD CLASS="dddefault">0</TD> 
</TR> 

이 내가 지금 무엇을 가지고 있지만 이것은 단지 TD 태그의 클래스를 반환하지 : 이것은 내가 2 TR 태그에 1 TD 태그에 값에 액세스하려고 코드의 일부입니다 그 안에 값 :

List<?> table = page.getByXPath("//table[@class='datadisplaytable'][1]//tr[2]/td"); 

나는 그것의 속성을 TD 태그의 값을 취득하지 가겠어요 어떻게?

편집 : 나는 웹 페이지에서 정보를 검색하는 자바 응용 프로그램을 만들려고하고

HtmlTableDataCell[<td class="dddefault">] 
+0

텍스트()를 받아야합니까? – Eduardo

+0

td 태그 안의 값을 가져와야합니다.이 경우 '46'이됩니다. – KrispyDonuts

+0

자바를 마지막으로 사용한 이후로 시간이 지났지 만 text() 등의 메서드가 있어야합니다. – Eduardo

답변

7

: 반환이 위의 코드입니다. (TABLE 상단 요소입니다)

문서 등의 질문에 표시된다고 가정

:이 내가 2 TR 태그에 1 TD 태그에 값에 액세스하려고 코드의 일부입니다

사용는 :

/TABLE/TR[2]/TD[1]/text() 

이 최상위 요소 TABLE 번째 TR 자식의 제 TD 자식 텍스트 노드 아이를 선택한다.

테이블은 XML 문서에 묻혀 있지만 고유하게 CLASS 속성으로 식별 할 수있는 경우

사용 :이의 첫 번째 TD 아이의 모든 텍스트 노드의 아이를 선택

//TABLE[@CLASS='datadisplaytable']/TR[2]/TD[1]/text() 

두 번째 TRCLASS 특성의 문자열 값이 'datadisplaytable'이되도록 XML 문서에서 TABLE 요소 중 하나 (우리는 thre가 하나만 있습니다) 요소의 자식이 TABLE입니다.

마지막으로, 더 나쁜 경우, 그 TABLE 요소가 많은이있을 수 CLASS 속성의 값이 'datadisplaytable'이며, 우리가 최초의 테이블 사용 선택합니다 :

(//TABLE[@CLASS='datadisplaytable'])[1]/TR[2]/TD[1]/text() 
+1

이것은 xpath의 세부 사항을 이해하는 데 많은 도움이됩니다. 나는 단지 텍스트()를 할 수 있다는 것을 몰랐다. 이것은 .getTextContent()를 형 변환하고 사용하는 것보다 낫습니다. 도와 주셔서 감사합니다! – KrispyDonuts

+0

@Saad : 표준 XPath 함수'string()'을 사용하여 문자열 값을 직접 가져올 수 있습니다. 따라서'string (expressionSelectingAnElement)'는 요소의 모든 텍스트 노드 자손의 연결을 반환합니다. –

1
for getting the text content from an element there is an xpath function called "text()" which you can use. 

Element containing text 't' exactly   //*[.='t'] 
Element <E> containing text 't'    //*[.='t'] 
<a> containing text 't'      //a[contains(text(),'t')] 
<a> with target link 'url'     //a[@href='url'] 
Link URL labeled with text 't' exactly  //a[.='t']/@href 

당신이 만약 또한 JwebUnit을 사용하고 있으며 텍스트를 가져 오는 데 사용할 수있는 "getElementTextByXPath"메소드가 있습니다. net.sourceforge.jwebunit.junit.WebTestCase

getElementTextByXPath

공공 문자열 getElementTextByXPath (문자열 XPath는) 추천하지 않습니다. 주어진 요소의 텍스트를 가져옵니다. 매개 변수 : xpath - 요소의 xpath입니다.

for (int i = 1; i != 6; i++) { 

     String result = getElementTextByXPath("//td["+i+"][text()]"); 

     System.out.println("The Content of TD is " +result); 
    } 
관련 문제