Jsoup遍历DOM树的问题

时间:2015-05-20 23:10:50

标签: java html dom jsoup

我正在使用jsoup来分析一些HTML源文件。当我遍历HTML源代码时,我发现了一些奇怪的东西:

            final HashMap <Node, Integer> idMap = new HashMap <Node, Integer>();
            doc.traverse(new NodeVisitor(){
                @Override
                public void head(Node node, int depth) {
                    int sequentialNodeId = info.sequentialId++;
                    idMap.put(node, sequentialNodeId);                  
                }

                @Override
                public void tail(Node node, int depth) {                    
                    System.out.println(idMap.get(node));                                        
                }
            });

所以这里我使用idMap来存储节点ID,以便稍后在tail()方法中检索它们。我没有使用node.hashCode()因为不同节点有许多重复的哈希码。我曾经发布了关于这个问题的question,并且jsoup团队说它已经修复了,但它仍然发生在我身上,我不确定它是否与我正在处理的HTML源文件有关

我的问题是idMap.get(node)会抛出许多空指针。如果head和tail方法中的节点应该相同,那么为什么会发生这种情况?

我需要使用节点ID来记录每个节点的DFS顺序,以及访问首次访问节点时初始化的数据结构,并且应该在上次访问节点时进行修改。数据结构对每个节点都是唯一的。我不知道是否还有其他方法可以做到这一点。任何投入将不胜感激。非常感谢。

1 个答案:

答案 0 :(得分:0)

尝试使用最新的Jsoup版本(撰写本文时为1.8.3)并重新测试您的代码。如果仍然无效,请随时在下面发表评论。