数组对比方法
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 变成了 C,C 变成了 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 时,1、3、4 构成公共子序列,因此 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 |
| 集合、标签、权限、分类 | 无序 |
你可以在执行对比前,通过 设置 面板切换数组对比方法。