java – 遍历DOM树时的Jsoup节点哈希码冲突
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 遍历DOM树时的Jsoup节点哈希码冲突,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1552字,纯文字阅读大概需要3分钟。
内容图文
![java – 遍历DOM树时的Jsoup节点哈希码冲突](/upload/InfoBanner/zyjiaocheng/809/23791e9c80f8463cb727e5ab264b5f82.jpg)
我正在使用java jsoup来构建HTML DOM树,其中使用了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 */
}
}
因此,当运行它时,即使在前几个输出中,我也会看到许多相同的哈希码.
哈希码非常大,我不期望这种奇怪的行为.我使用了jsoup-1.8.1.
任何意见都将非常感谢,谢谢.
解决方法:
Note: This bug has been fixed in jSoup 1.8.2, so my answer is no longer relevant.
它可能是jSoup源代码中的一个错误.从source:
@Override
public int hashCode() {
int result = parentNode != null ? parentNode.hashCode() : 0;
// not children, or will block stack as they go back up to parent)
result = 31 * result + (attributes != null ? attributes.hashCode() : 0);
return result;
}
我不是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>
以下代码:
String html = //HTML posted above
Document doc = Jsoup.parse(html);
Elements elements = doc.select("[style]");
for (Element e : elements) {
System.out.println(e.hashCode());
}
它给:
-148184373
-148184373
-1050420242
2013043377
在计算哈希时,它似乎完全忽略了内容文本,只有属性很重要.
您应该实现自己的解决方法.
Bug报告了here.
内容总结
以上是互联网集市为您收集整理的java – 遍历DOM树时的Jsoup节点哈希码冲突全部内容,希望文章能够帮你解决java – 遍历DOM树时的Jsoup节点哈希码冲突所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。