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

时间:2017-11-10 11:43:15

标签: java selenium compare

我有两个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或者类似的东西,但这不是我需要的。

对此有何想法?

1 个答案:

答案 0 :(得分:0)

我认为你不应该在字符串级别上进行比较,因为从字符串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;
}