如何使用xpath/htmlwebunit

问题描述:

获取​​标记中的值我试图创建一个从网页中检索信息的Java应用程序。这是我试图访问该值在第一td标签在第二tr标签的部分代码:如何使用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标签,而不是它里面的值:

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

我该如何去得到td标签的价值而不是它的属性?

编辑:

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

您需要获取文本()? – Eduardo 2012-02-28 18:58:02

+0

我需要获取td标签内的值,在这种情况下,它将是'46' – KrispyDonuts 2012-02-28 19:00:59

+0

自从我上次使用Java以来​​已经有一段时间了,但应该有一种叫做text()的方法,或者类似的东西 – Eduardo 2012-02-28 19:01:55

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

假设该文件是在问题,如图(TABLE是所述顶部元件),

使用

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

此选择第一TD儿童的所述第二子TR顶部元件TABLE中的任何文本子节点。

如果表被掩埋在XML文档中,但可以通过其CLASS属性被唯一标识,使用

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

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

最后,如果更糟的是,可能有许多TABLE元件,其CLASS属性的值是'datadisplaytable',我们希望在第一个这样的表,使用选择:

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

这有助于理解xpath的细节。我不知道可以只做文本()。这可能比投射和使用.getTextContent()更好。谢谢您的帮助! – KrispyDonuts 2012-02-28 19:28:51

+0

@Saad:你可以通过使用标准的XPath函数'string()'直接得到字符串值。所以,'string(expressionSelectingAnElement)'返回元素的所有文本节点后代的连接。 – 2012-02-28 19:54:34

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); 
    }