如何使用Jsoup遍历HTML树?

我觉得这个问题已被提出,但我没有找到任何答案。

从Jsoup中的Document元素,我如何遍历HTML内容中的所有元素?

我正在阅读文档,我正在考虑使用childNodes()方法,但它只接受下面一个leval的节点(我理解)。 我想我可以使用这种方法进行一些递归,但我想知道是否有更合适/本地的方法来做到这一点。

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 = "this is head this is body"; Document doc = Jsoup.parse(s); System.out.println(htmlTags(doc)); } }