Eclipse 平台 XML 比较
XML 比较插件允许您对两个 XML 文档执行结构比较。它返回一个差别树,指示添加或除去了哪些
XML 元素以及在属性或正文方面有哪些差别(对于修改过的 XML 元素)。
安装插件
- 将文件夹 org.eclipse.compare.examples.xml 复制到 Eclipse 的 plugins 子文件夹。
使用插件
当比较扩展名为 .xml 比较文件时,会自动使用此插件。
缺省情况下,XML 比较使用无序比较方法,该方法忽略 XML 元素在文档中出现的顺序并对它们进行匹配以使最相似的元素得以匹配。还有一种有序比较方法,这种方法完全按 XML 元素在文档中出现的顺序对它们进行比较。大多数情况下,这种比较方法的用处不大。
可从结构视图的工具栏的下拉列表更改比较方法。
如果某个 XML 文档包含可由子元素的属性或文本唯一标识的元素,建议对此类型的 XML 文档创建“标识映射方案”。
有关使用此插件的更多信息,请参阅教程和示例。
标识映射方案
“标识映射方案”对 XML 元素指定唯一标识此元素的子元素的属性或文本。这样可以确保在比较过程中匹配正确的元素,从而相互进行比较。如果未对 XML 元素指定“标识映射”,将使用通用匹配算法。但是,此通用匹配算法并不总是返回想要的结果。原因在于通用匹配算法寻找要比较的两个分析过的树的节点进行匹配以作比较,这样会使差别降至最小。其结果是两个匹配的 XML 元素通常结构类似但表示两个完全不同的信息实体。
有序条目
当使用缺省的“无序”比较(具有标识映射或不具有标识映射)时,有时希望指定以有序方式(而不是通常的无序方法)对某些元素的子代进行比较。例如,当比较 ANT 文件时,target 元素的子代的出现顺序很重要。
这种情况下,可创建有序条目。“有序条目”指定以有序方式对
XML 元素的直系子代(由其路径标识)进行比较(但属性仍以无序方式进行比较)。除非另外指定,否则将继续以无序方式比较这些子元素的子代。定义“标识映射方案”和“有序条目”
可以三种不同方式创建“标识映射方案”:
- 通过展开扩展点 idMapping
- 使用 XML 比较首选项页
- 使用工具栏和上下文菜单中的“创建新的标识映射方案”按钮
方法 1 创建所谓的内部映射方案。“内部映射方案”不能在运行时编辑。但是,使用“首选项页”中的编辑副本按钮可以创建内部“标识映射方案”的可编辑副本。
方法 2 和方法 3 创建所谓的用户映射方案。这些方案是由用户在运行时创建的并可随时在“首选项页”中进行修改。可将内部映射方案和用户映射方案与文件扩展名相关联。因此,当比较两个带有此文件扩展名的 XML 文件时,将自动使用带有此扩展名的特定“标识映射方案”。
当创建或编辑某个特定 XML 元素的标识映射时,必须指定以下四项(请参阅示例):
- 元素名称。
- 元素路径。这是元素的由 XML 文档的根目录至元素父代的路径。
- 标识此元素的标识的名称。
- 第 3 项中的标识名称是元素的属性的名称或其中一个子代的名称(这种情况下此子元素的文本将用作标识)。
扩展点
在 XML 比较插件中仅有一个扩展点可用。它用来创建内部“标识映射方案”: