假设在一个html页面中有这三个锚点。
使用htmlunit,我想得到这些锚点中的数字(作为数字而不是文本)。
<a class="someclass" href="http://someaddress1.com">3.14</a>
<a class="someclass" href="http://someaddress2.com">1.22</a>
<a class="someclass" href="http://someaddress3.com">6.66</a>
该作业必须通过以下testXPath方法完成:
public static void testXPath () {
WebClient webClient = new WebClient();
webClient.setJavaScriptEnabled(false);
webClient.setCssEnabled(false);
try {
final HtmlPage page = (HtmlPage) webClient.getPage("pageurl");
String XPath="//a[@class='someclass']/number()";
List<Object> list = (List<Object>) page.getByXPath(XPath);
for (Objects : list) {
System.out.println(s);
}
} catch (Exception e) {
e.printStackTrace();
}
}
当我运行这个时,我得到:
java.lang.RuntimeException: Could not retrieve XPath
Caused by: javax.xml.transform.TransformerException: Unknown nodetype: number
当我只想获取href值(作为字符串)时,也会出现同样的错误。在这种情况下:
String XPath="//a[@class='someclass']/@href/string()";
但是当,
String XPath="string(//a[@class='someclass']/@href)";
我只得到第一个href值
http://someaddress1.com
我知道我可以把这些数字作为字符串,然后把它们解析为Double
List<DomText> list = (List<DomText>) page.getByXPath("//a[@class='someclass']/text()");
for (DomText d : list) {
System.out.println(Double.parseDouble(list.get(i).toString()));
}
我可以使用.getValue()来获取hrefs
List<DomAttr> list = (List<DomAttr>) page.getByXPath("//a[@class='someclass']/@href");
for (DomAttr d : list) {
System.out.println(list.get(i).getValue());
}
但事实并非如此。我想使用XPath函数来实现这一点(我猜它会更快)。