[英]How to extract text from all the elements in a webpage individually, using JSoup?
[英]How to remove all elements on text level with Jsoup?
我正在做一个项目,我只对页面布局感兴趣,而对文本不感兴趣。 我目前难以摆脱文本级的每个元素。 例如:
<div>
<ul>
<li>some menu item</li>
<li>some menu item</li>
<li>some menu item</li>
</ul>
</div>
<div>
<h3>Tile of some text</h3>
<p></p>
<p>some text</p>
<ul>
<li>some other text</li>
<li>some other text</li>
<li>some other text</li>
</ul>
</div>
我想摆脱文本级别上的ul,li,p和h3元素,但保留div和带有菜单项的列表,因为这是页面布局的一部分。 如何使用Jsoup做到这一点?
我一直在尝试使用document.select()然后使用.remove()元素来执行此操作,但是select函数并非针对此类非标准查询。
编辑:我想要得到的最终结果是:
<div>
<ul>
<li>some menu item</li>
<li>some menu item</li>
<li>some menu item</li>
</ul>
</div>
<div>
</div>
如您所见,当ul标签与其中包含文本的标签处于同一级别时,它将删除列表。 ul标签是页面上文本的一部分,与页面的布局无关。 带有菜单项的ul标签对于页面很重要,因为它定义了那里的菜单,并且有3个不同的项。
您可以使用标准选择并删除所有p
, li
和ul
元素:
doc.select("p").remove();
doc.select("ul").remove();
doc.select("li").remove();
我首先找到了要删除的标签,然后在其父标签上调用了empty()。
public static void main(String[] args) {
String html = "<div> <ul> <li>some menu item</li> <li>some menu item</li> <li>some menu item</li> </ul></div><div> <h3>Tile of some text</h3> <p></p> <p>some text</p> <ul> <li>some other text</li> <li>some other text</li> <li>some other text</li> </ul></div>";
Document doc = Jsoup.parse(html.toString());
Elements elements = doc.body().select("*");
for (Element element : elements) {
if ("h3".equals(element.tagName()) || "p".equals(element.tagName())) {
element.parent().empty();
}
}
System.out.println(doc.toString());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.