繁体   English   中英

Java-比较2个HTML字符串并返回不匹配的对象

[英]Java - Compare 2 HTML strings and return the mismatched objects

我有两个1行innerHTML字符串(相当大),我需要比较它们,如果它们不匹配,我需要知道哪些对象不同。 例:

HTML 1:

<div><p><span class="text">MyText</span></p></div>

HTML 2:

<div><p><span class="text">NotMyText</span></p></div>

应该返回对象列表,在这种情况下,只能返回1个项目:

<span class="text">NotMyText</span>

我正在数千个链接/页面上运行脚本,因此速度非常重要。 我尝试了Google Diff,它仅返回不匹配的部分。 它会说MyText已删除,NotMyText已添加或类似内容,但这不是我所需要的。

有什么想法吗?

我认为您不应该在String Level上进行比较,因为从String diff比较不容易找出您的位置,其中的封闭元素是什么。 如果您使用DOM树表示,则应该更容易做到。

如果我是你,我会写一个递归的DOM比较方法,然后像这样对整个树进行一种深度优先搜索(只是伪代码):

DomDifference compare(DOMElement a, DOMElement b) {
   if(a.isLeaf()) {
     return DomDiff(a, b)
   }
   foreach(child: a.children()) {
     otherChild = b.nextChild()
     result = compare(child, otherChild);
     if(!result.isEqual()) {
       return result;
     }
   }
   return DomDifference.nodesAreEqual;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM