java - Jsoup 遍历 DOM 树的问题

标签 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顺序,以及访问第一次访问节点时初始化的数据结构,并在最后一次访问节点时修改该数据结构。每个节点的数据结构都是唯一的。我不知道是否还有其他方法可以做到这一点。任何投入将不胜感激。非常感谢。

最佳答案

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

关于java - Jsoup 遍历 DOM 树的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30361882/

相关文章:

Javascript DOM 对象图

java - 我如何使用 selenium 从 href 链接中提取电子邮件 ID

html - 输入占位符垂直对齐

javascript - 内联列表中的元素未对齐

javascript - 如何使用 JavaScript\JQuery 将一些内容写入具有特定 id 的 div 中?

php - 如何将 DOM 对象作为 JSON 对象发送

java - 在java spring中使用ActiveMq为多个项目创建公共(public)代理

java - [Android]从字符串获取小时

java - 更新查询的 SQL 语法错误

javascript - 如何防止 Javascript/JQuery 移动页面上的其他元素?