我正在尝试解析html文件而我正在需要从文件中检索表格。
我可以假设getElementsByClass
函数按照文件中遇到的顺序返回元素集合吗?同问getElementsByTag
和getElementsById
。
Elements table_rows = tbody.getElementsByClass("table_row");
for(Element tr : table_rows){
Elements table_datas = tr.getElementsByTag("td");
}
答案 0 :(得分:0)
Element.getElements *方法按照它们在文档中出现的顺序(使用深度优先前序遍历)返回元素,这可以从源代码轻松验证。首先,Elements.getElementsByClass,使用与类匹配的Evaluator:
public Elements getElementsByClass(String className) {
Validate.notEmpty(className);
return Collector.collect(new Evaluator.Class(className), this);
}
其他getElements *方法类似(当然,使用不同的Evaluators)。 getElementById类似,只是它只返回集合中的第一个元素(如果集合为空,则返回null)。
Collector.collect只是设置一个访问者,在第一次遇到元素时添加与Evaluator匹配的元素(预购):
public static Elements collect (Evaluator eval, Element root) {
Elements elements = new Elements();
new NodeTraversor(new Accumulator(root, elements, eval)).traverse(root);
return elements;
}
private static class Accumulator implements NodeVisitor {
/* uninteresting parts removed */
public void head(Node node, int depth) {
if (node instanceof Element) {
Element el = (Element) node;
if (eval.matches(root, el))
elements.add(el);
}
}
}
NodeTraversor.traverse被明确记录为对其参数及其所有后代执行深度优先遍历,因此我不会在此处显示代码。