我想这个问题已经被问到了,但我什么也没找到。
从Document
Jsoup 中的元素,如何遍历 HTML 内容中的所有元素?
我正在阅读文档,并且正在考虑使用该childNodes()
方法,但它仅从以下一级获取节点(据我所知)。我想我可以使用这种方法进行一些递归,但我想知道是否有更合适/原生的方法来做到这一点。
从Document
(和任何子Node
类),您可以使用该traverse(NodeVisitor)
方法。
例如:
document.traverse(new NodeVisitor() {
public void head(Node node, int depth) {
System.out.println("Entering tag: " + node.nodeName());
}
public void tail(Node node, int depth) {
System.out.println("Exiting tag: " + node.nodeName());
}
});
1) 您可以使用 * 选择器选择文档的所有元素。
Elements elements = document.body().select("*");
2) 使用 Element.ownText() 方法单独检索每个文本。
for (Element element : elements) {
System.out.println(element.ownText());
}
3) 使用 Element.html(String strHtml) 单独修改每个文本。(清除元素中任何现有的内部 HTML,并将其替换为已解析的 HTML。)
element.html(strHtml);
希望这会帮助你。谢谢!
您可以使用以下代码:
public class JsoupDepthFirst {
private static String htmlTags(Document doc) {
StringBuilder sb = new StringBuilder();
htmlTags(doc.children(), sb);
return sb.toString();
}
private static void htmlTags(Elements elements, StringBuilder sb) {
for(Element el:elements) {
if(sb.length() > 0){
sb.append(",");
}
sb.append(el.nodeName());
htmlTags(el.children(), sb);
sb.append(",").append(el.nodeName());
}
}
public static void main(String... args){
String s = "<html><head>this is head </head><body>this is body</body></html>";
Document doc = Jsoup.parse(s);
System.out.println(htmlTags(doc));
}
}