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



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

网页 1:

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

网页 2:

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

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

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

我在数千个链接/页面上运行脚本,因此速度非常重要。我尝试了谷歌差异,它只返回不匹配的部分。它会说MyText已被删除,NotMyText已被添加或类似的东西,但这不是我所需要的。

对此有任何想法吗?

我认为你不应该在字符串级别进行比较,因为从字符串差异中找出你在哪里,封闭元素是什么并不容易。如果你在 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;
}

相关内容

  • 没有找到相关文章

最新更新