Java 遍历DOM树时Jsoup节点哈希代码冲突

Java 遍历DOM树时Jsoup节点哈希代码冲突,java,html,dom,hash,jsoup,Java,Html,Dom,Hash,Jsoup,我正在使用JavaJSOUP构建HTMLDOM树,其中使用了Node.hashCode()。但我发现,使用以下代码遍历DOM树时,会发生很多哈希代码冲突: doc.traverse(new NodeVisitor(){ @Override public void head(Node node, int depth) { System.out.println("node hash: "+ node.hashCode()); /* some ot

我正在使用JavaJSOUP构建HTMLDOM树,其中使用了
Node.hashCode()
。但我发现,使用以下代码遍历DOM树时,会发生很多哈希代码冲突:

doc.traverse(new NodeVisitor(){

    @Override
    public void head(Node node, int depth) {

        System.out.println("node hash: "+ node.hashCode());

        /* some other operations */
    }

    @Override
    public void tail(Node node, int depth) {
        // TODO Auto-generated method stub

        /* some codes */
    }
}
String html = //HTML posted above

Document doc = Jsoup.parse(html);

Elements elements = doc.select("[style]");
for (Element e : elements) {
   System.out.println(e.hashCode());
}
因此,当运行该程序时,我看到许多相同的哈希代码,甚至在前几个输出中

散列码非常大,我不希望出现这种奇怪的行为。我使用了jsoup-1.8.1。 如有任何意见,将不胜感激,谢谢

注意:这个错误已经在JSOUP1.8.2中修复,所以我的答案不再相关

这可能是jSoup源代码中的错误。从:

我不是Java专家,但这看起来好像可以为不同的节点返回相同的值,如果它们具有相同的属性。(同一位家长,感谢@alkis的评论)


编辑:我可以复制这个。使用以下HTML:

<html>
    <head>
    </head>
    <body>
        <div style="blah">TODO: write content</div>
        <div style="blah">Nothing here</div>
        <p style="test">Empty</p>
        <p style="nothing">Empty</p>
    </body>
</html>
它给出:

-148184373
-148184373
-1050420242
2013043377
在计算散列时,它似乎完全忽略了内容文本,只有属性才是重要的


您可能应该实施自己的解决方案



报告错误。

出于兴趣,节点的内容是否相同?如果1)散列是从内容创建的,或者2)它识别重复以减少内存占用,那将很有趣。我使用的html页面来自Amazon(我想分析其产品页面中的字段)。我认为每一个在内容上都是独一无二的。即使有具有相同内容的节点,也不可能有那么多。您能提供一些复制此行为的html示例吗?@alkis,我可以复制它,请参见我的答案。显然这两个
TODO:write contentNothing here
具有相同的散列。它们具有相同的属性(
style=“blah”
)和相同的父级。是的,这一定是个bug。你应该把它归档。好发现。荣誉谢谢你的报道,我已经搞定了。它将出现在JSOUP1.8.2中
-148184373
-148184373
-1050420242
2013043377