2012-02-28 13 views
5

Webページから情報を取得するJavaアプリケーションを作成しようとしています。​​タグ内の値をxpath/htmlwebunitで取得する方法

<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タグのクラスを返しません:これは私が第二のtrタグに第一のTDタグの値にアクセスしようとしていたコードの一部です。その内部の値:

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

tdタグの値を取得する方法はありますか?

編集:私は、Webページから情報を取得するJavaアプリケーションを作成しようとしています

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

あなたはテキスト()を取得する必要がありますか? – Eduardo

+0

tdタグ内の値を取得する必要があります。この場合は '46' – KrispyDonuts

+0

最後にJavaを使用してからしばらくしていますが、text()などのメソッドが必要です。 – Eduardo

答えて

7

:戻って、この上記のコード。これは私が第二のtrタグに第一のTDタグの値にアクセスしようとしていたコードの一部です:

文書が質問に示されているようと仮定すると(TABLEは先頭の要素である)、

使用

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

これは、上部要素TABLEの第TR子の最初TD子のテキストノードの子を選択します。

テーブルをXML文書に埋め込まれているが、一意にCLASS属性によって識別することができ、を使用する場合:

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

これは最初のTD子のテキストノードの子を選択しますそのCLASS属性の文字列値が文字列'datadisplaytable'であるように、XML文書内の要素TABLEのいずれか(われわれはthreがそのような要素であることはわかっています)の第2のTRの子です。あなたの場合は

(//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 

:最後に、さらに悪い場合、そのCLASS属性の値が'datadisplaytable'であり、我々が最初にこのようなテーブル、使用中に選択したい多くのTABLE要素があるかもしれない

JwebUnitも使用していますが、テキストを取得するためにも使用できるgetElementTextByXPathメソッドがあります。 net.sourceforge.jwebunit.junit.WebTestCase

getElementTextByXPath

パブリックストリングgetElementTextByXPath(文字列のXPath) 推奨されていません。 指定された要素のテキストを取得します。 パラメータ: xpath - 要素のxパス。

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

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

     System.out.println("The Content of TD is " +result); 
    } 
関連する問題