HtmlUnit的DomElement无法保存XPath结果的状态

时间:2016-03-14 13:02:41

标签: html xml xpath

当我搜索大文档有时我需要保存大型XPath表达式的结果,但是如果我尝试将XPath结果存储在DomElement对象中并且仅在我已经指向DomElement对象的代码块上进行新的XPath查询,我得到基于整个文档的结果。例如:

DomElement block = page.getByXPath("//div[@class='block_of_code']");
System.out.println(block.getByXPath("//span[@class='red']"));

因此,第一行将使用class =' block_of_code'获取页面上的所有div。但是当我尝试从块对象中打印出所有span元素时,我会返回页面上的所有span元素,而不仅仅是在该块中。

是否有替代方案(最好是在HtmlUnit包中)存储小块html块并在xPath上进行操作,而不是整页?

谢谢!

1 个答案:

答案 0 :(得分:1)

/字符开头的XPath表达式将始终查询整个文档,即使您将上下文节点传递给该函数也是如此。

要相对于上下文节点进行查询,可以使用.字符启动它。

以下内容应达到您的目的:

DomElement block = page.getByXPath("//div[@class='block_of_code']");
System.out.println(block.getByXPath(".//span[@class='red']"));