我正在使用 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/