如何使用xpath / htmlwebunit获取标记内的值

时间:2012-02-28 18:53:05

标签: xpath jwebunit

我正在尝试创建一个从网页中检索信息的Java应用程序。这是我试图访问第二个tr标签中第一个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标记的类而不是其中的值:

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

我如何获取td标签的值而不是其属性?

编辑:上面的代码返回:

HtmlTableDataCell[<td class="dddefault">]

2 个答案:

答案 0 :(得分:7)

  

我正在尝试创建一个从网页中检索信息的Java应用程序。这是我试图访问第二个tr标签中第一个td标签中的值的代码的一部分:

假设文档如问题所示(TABLE是顶部元素),

使用

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

这将选择顶部元素TD的第二个TR子项的第一个TABLE子项的任何文本节点子项。

如果表格隐藏在XML文档中,但可以通过其CLASS属性进行唯一标识,请使用

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

这将选择XML文档中任何(我们知道只有一个)元素TD的第二个TR子元素的第一个TABLE子元素的任何文本节点子元素,这样它的CLASS属性的字符串值就是字符串'datadisplaytable'

最后,如果更糟糕的话,可能会有很多TABLE个元素的CLASS属性的值为'datadisplaytable',我们想在第一个这样的元素中选择表,使用:

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

答案 1 :(得分: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

public String getElementTextByXPath(String 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);
    }