数组对比方法

XML 元素经常包含重复的子元素。根据顺序是否重要、如何报告新增和删除,以及重复值是否有意义,Compare XML 提供三种数组对比方法。

按索引

将两个父元素相同位置上的子元素逐一对比。

<!-- 基准 -->
<items>
  <item>A</item>
  <item>B</item>
  <item>C</item>
</items>

<!-- 对照 -->
<items>
  <item>A</item>
  <item>C</item>
  <item>B</item>
</items>

使用按索引时,第二和第三个位置都会被报告为变更,因为 B 变成了 CC 变成了 B。这种方法最严格,适用于子元素有序且位置对齐的场景,例如已排序列表或固定长度的序列。

LCS(最长公共子序列)

LCS 会找出两个父元素中共同出现的最长有序子元素序列。位于该序列内的元素被视为未变更,序列外的元素则被报告为新增或删除。

<!-- 基准 -->
<items>
  <item>1</item>
  <item>2</item>
  <item>3</item>
  <item>4</item>
</items>

<!-- 对照 -->
<items>
  <item>1</item>
  <item>3</item>
  <item>4</item>
  <item>5</item>
</items>

使用 LCS 时,134 构成公共子序列,因此 2 被报告为删除,5 被报告为新增。LCS 适合子元素基本有序但中间可能插入或删除元素的场景,例如更新日志或有序事件列表。

无序

将子元素作为集合对比,忽略顺序和重复值。

<!-- 基准 -->
<items>
  <item>1</item>
  <item>2</item>
  <item>2</item>
  <item>3</item>
</items>

<!-- 对照 -->
<items>
  <item>3</item>
  <item>1</item>
  <item>2</item>
</items>

使用无序时,这些子元素被视为相同,因为它们包含相同的唯一值。如果一侧有 4 而另一侧没有,4 会被报告为新增。这种方法适用于顺序无关的集合场景,例如标签列表或权限集合。

如何选择

使用场景推荐方法
有序序列、已排序列表按索引
基本有序但偶有插入或删除LCS
集合、标签、权限、分类无序

你可以在执行对比前,通过 设置 面板切换数组对比方法。