关于解析文档以提取资源链接的最佳方法,我有一个问题。
你在这本食谱中展示:
以下构建DOM表示的方法:
Document doc = Jsoup.connect(url).get(); Elements links = doc.select("a[href]");
所以我不确定这是表现最好的方式。
我在3月3日在JSOUP googlegroups上提出了这个问题,但我不确定我的邮件是否通过了过滤器。
答案 0 :(得分:3)
最佳表现方式是使用NodeTraversor
,这是访客模式的实现。它将扫描整个树,就像另外两个选项一样,但是
getAllElements()
不支持SAX解析模型,因为Jsoup总是创建一个DOM树,因此不需要能力较弱的SAX。 HtmlCleaner
也是如此。
final List<Element> elements = new ArrayList<Element>();
new NodeTraversor(new NodeVisitor() {
public void head(Node node, int depth) {
if (node instanceof Element) {
Element element = (Element) node;
if(element.tagName().equalsIgnoreCase("a") && element.hasAttr("href")){
elements.add(element);
}
}
}
public void tail(Node node, int depth) {
}
}).traverse(doc);
return elements;