我有一个网页,我已将其保存在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">
.
.
.
点表示这些节点继续运行,因为输出非常大。 如果需要我可能没有提及任何其他信息,请告诉我。
答案 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);
}