Eclipse 比较中心介绍
目前,">Eclipse 支持任何两个相同类型的文件的比较,例如选中两个相同类型文件 -> 右键 ->Compare with->Each other,Eclipse 会根据文件类型进行比较,通常我们用到的是文本比较,因此本文中也是针对文本比较进行功能上的丰富和扩展。
如下图为 Eclipse 的比较过程,Eclipse 的比较主要分为两部分,第一部分为内容匹配比较,并将结果显示出来;第二部分是针对比较结果,同步合并差异,达到修改模型的目的,同时也可以自定制其他操作如保存、生成报表等。本文侧重介绍第一部分。
图 1. Eclipse 的比较过程
如图所示,首先,Eclipse 比较中心会根据比较文件生成基础模型,基础模型中包含模型匹配的最小元素, Eclipse 会针对这些元素进行相似元素的匹配比较,生成包含差异的比较模型并显示在 Eclipse 编辑器中。然后,通过编辑器中定义的操作对元素进行同步,生成最终模型。
在这个过程中,我们可以自定义的部分有哪些呢?
首先,在生成基础模型的时候,我们可以针对需求,将需要进行比较的内容筛选出来,按照模型中的层次生成对应的元素;然后,在元素匹配上,可以定义自己的匹配原则,这就使得即便模型中的元素无法完全匹配,但仍可以通过自己的原则强制匹配,进而可以进行比较;接着便是定义自己的比较规则,通过比较规则可以在逻辑上认定元素之间的区别,而不是生硬的字符串比较;最后,便是在比较结果上进行自定义操作,开发人员可以根据需求定制不同操作,比如将差异同步到另一端,保存比较结果,生成比较结果报表等。
结果预览
本文主要侧重介绍如何在已有的 Eclipse 中定制比较规则,清晰的显示被比较对象的差异,为了使读者带有更强的目的性来阅读本文,首先介绍本文中的实例的最终结果。
比较对象
本文中选取的比较对象为 *.xml 文件,利用 dom4j 解析 xml 文件,并根据需要生成基本模型。
Xml 的简要的人口统计数据,是一个非常简单的源,也降低了在比较过程中的逻辑,便于理解。
清单 1. xml 文件的基本内容
<?xml version="1.0" encoding="UTF-8"?> <country id="Country1" Country="China" population="1,341M" year="2010"> <Province id="p1" Province="BeiJing" population="1,961"> <city id="c1" City="BeiJing" population="1,961"> </city> </Province> <Province id="p2" Province="JiLin" population="2,746"> <city id="c1" City="ChangChun" population="767"> </city> <city id="c2" City="JiLin" population="441"> </city> <city id="c3" City="SongYuan" population="288"> </city> <city id="c4" City="OtherCity" population="1,
250"> </city> </Province> </country>
Xml 文件的基本内容如清单 1 所示,分三个层次来统计人口信息,分别是 Country, Province,City。每个层次对应人口信息添加在"population"属性中,在 Country 层中,标识出年份信息,如清单 1 中为 2010 年信息。
创建同样一份结构相同,数据不同的 *.xml 文件来保存 2011 年人口信息。
注:此信息仅供试验用途。
比较结果预览
我们首先使用 Eclipse 已有的比较功能对两个 *.xml 文件进行比较,结果如图所示。
图 2. 使用 Eclipse 进行比较
下图为使用自定义比较中心进行比较的结果,比较结果将根据城市等级,依次展示不同城市的人口数量。
图 3. 使用自定义比较中心进行比较
对比 Eclipse 自身的比较和自定义的比较结果。在后者的比较结果中,过滤文件中的冗余无用信息,能够清晰的显示出所关注的内容,一目了然。同时对于不熟悉源文件结构的使用者,自定义的结果更便于直接突出内容,降低使用者与源文件的耦合程度,方便进行数据分析及后续处理。