假设在一个 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() 来获取 href
List<DomAttr> list = (List<DomAttr>) page.getByXPath("//a[@class='someclass']/@href");
for (DomAttr d : list) {
System.out.println(list.get(i).getValue());
}
但事实并非如此。我想使用 XPath 函数来做到这一点(我猜它更快)。