HtmlElement没有显示子节点但HtmlElement.asXml()方法没有

时间:2017-05-11 07:15:50

标签: java htmlunit

我有一个网页,我已将其保存在HtmlPage对象中。我应用了XPath,其结果存储在列表中。

List<?> items = null;
items = page.getByXPath("//div[contains(@class,'search-result-cards')]/div[contains(@class,'listContainer')]");

现在我观察到的是,当我使用HtmlElement迭代这些项时,我只得到div标签的第一行,其中包含类listContainer但不包含其子节点。但是,在使用he.asXml()方法时,我也会获得有关子节点的完整信息。

for(HtmlElement he : (List<HtmlElement>) items)
{
    br.write("Printing just the element ::: "+he);
    br.write(he.asXml());
}

这里,br是一个BufferedWriter对象,用于将输出写入文件。 问题是,我希望在我仅在HtmlElement对象中调用he.asXml()方法之后出现所有这些信息。可能吗?我尝试将字符串直接类型转换为HtmlElement对象,但这并不起作用。有人可以帮忙吗?

Output
Printing just the element ::: HtmlDivision[<div class="listContainer" data-ptitle="3139847000" data-reactid="402">]

he.asXml() Output
<div class="listContainer" data-ptitle="3139847000" data-reactid="402">
<div class="imageContainer" data-reactid="403">
<div class="prodInfoContainer" data-reactid="406">
.
.
.

点表示这些节点继续运行,因为输出非常大。 如果需要我可能没有提及任何其他信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

.toString()仅打印当前的DomElement,而不打印子项。

你需要通过使用XPath来获取孩子,例如:

List<HtmlElement> items = page.getByXPath("//div[contains(@class,'listContainer')]");
for (HtmlElement item : items) {
    List<HtmlElement> children = item.getByXPath(".//div");
    for (HtmlElement child : children) {
        System.out.println(child);
    }
}

for (HtmlElement child : item.getHtmlElementDescendants()) {
    System.out.println(child);
}