有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java HTML解析getElementByClass方法

我试图解析html文件,我需要从文件中检索一个表

我可以假定getElementsByClass函数按文件中的顺序返回元素集合吗?对于getElementsByTaggetElementsById也有同样的问题

Elements table_rows = tbody.getElementsByClass("table_row");
for(Element tr : table_rows){
    Elements table_datas = tr.getElementsByTag("td");
}

共 (1) 个答案

  1. # 1 楼答案

    元素。getElements*方法按照元素在文档中出现的顺序返回元素(使用深度优先的前序遍历),这很容易从源代码中验证。首先是元素。getElementsByClass,使用与类匹配的计算器:

    public Elements getElementsByClass(String className) {
        Validate.notEmpty(className);
        return Collector.collect(new Evaluator.Class(className), this);
    }
    

    其他getElements*方法是类似的(当然,有不同的评估者)。getElementById类似,只是它只返回集合中的第一个元素(如果集合为空,则返回null)

    收藏家。collect只是设置了一个访问者,在第一次遇到元素时添加与评估器匹配的元素(预排序):

    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。遍历被明确地记录为对其参数及其所有子代执行深度优先遍历,所以这里不显示代码