Java 如何使用Jsoup遍历HTML树?

Java 如何使用Jsoup遍历HTML树?,java,jsoup,traversal,Java,Jsoup,Traversal,我想这个问题已经问过了,但我什么也没发现 从Jsoup中的文档元素,如何遍历HTML内容中的所有元素 我正在阅读文档,并考虑使用childNodes()方法,但它只从下面的一个级别获取节点(据我所知)。我想我可以在这个方法中使用一些递归,但是我想知道是否有更合适的/本地的方法来实现这一点。从(和任何子类),您可以使用这个方法 例如: document.traverse(new NodeVisitor() { public void head(Node node, int depth) {

我想这个问题已经问过了,但我什么也没发现

从Jsoup中的
文档
元素,如何遍历HTML内容中的所有元素

我正在阅读文档,并考虑使用
childNodes()
方法,但它只从下面的一个级别获取节点(据我所知)。我想我可以在这个方法中使用一些递归,但是我想知道是否有更合适的/本地的方法来实现这一点。

从(和任何子类),您可以使用这个方法

例如:

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());
    }
});

您可以使用以下代码:

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));
    }
}
public类JsoupDepthFirst{
私有静态字符串htmlTags(文档文档){
StringBuilder sb=新的StringBuilder();
htmlTags(doc.children(),sb);
使某人返回字符串();
}
私有静态无效htmlTags(元素、StringBuilder sb){
用于(元素el:元素){
如果(sb.length()>0){
某人加上(“,”);
}
sb.append(el.nodeName());
htmlTags(el.children(),sb);
sb.append(“,”).append(el.nodeName());
}
}
公共静态void main(字符串…参数){
String s=“这是头,这是体”;
Document doc=Jsoup.parse;
System.out.println(htmlTags(doc));
}
}
1)您可以使用*选择器选择文档的所有元素

Elements elements = document.body().select("*");
2) 用于使用Element.ownText()方法分别检索每个元素的文本

3) 例如,使用Element.html(字符串strHtml)分别修改每个元素的文本。(清除元素中任何现有的内部HTML,并将其替换为已解析的HTML。)

希望这对你有帮助。 谢谢大家!

for (Element element : elements) {
  System.out.println(element.ownText());
}
element.html(strHtml);