主要内容

比较 XML 文件

您可以使用比较工具来比较一对 XML 文本文件。该工具将结果处理成一份报告,您可以使用该报告来浏览文件差异。您可以使用文本比较或层次化的 XML 比较对不同的 XML 文件进行比较。

XML 比较使用查瓦特算法来比较文件,如以下论文所述:

Change Detection in Hierarchically Structured Information, Sudarshan Chawathe, Anand Rajaraman, and Jennifer Widom; SIGMOD Conference, Montreal, Canada, June 1996, pp. 493-504.

此会议论文基于 1995 年公布的研究成果,请参阅 http://dbpubs.stanford.edu:8090/pub/1995-45

XML 比较报告显示在比较工具中。有关比较工具的详细信息,请参阅比较文件和文件夹以及合并文件

XML 比较报告以分层视图显示两个 XML 文件的不同部分。该报告不显示文件的相同部分。

如果文件完全相同或只有换行符不同,您会看到一条消息,说明没有差异。

注意

如果文件中原本对应的部分现在差异过大,则分析可能无法检测其匹配情况。

查瓦特分析中的变化检测基于评分算法。如果两个项的查瓦特得分超过阈值,则表示它们是匹配项。查瓦特算法的实现使用一种定义阈值的比较模式。

您可以使用以下方法之一选择磁盘上的 XML 文件进行比较:

  • “文件”或“工程”面板 - 要比较磁盘上的两个 XML 文件,请选择这两个文件。然后右键点击并选择比较选定的文件/文件夹。比较工具首先在左侧打开您选择的文件。

  • 命令行窗口 - 使用 visdiff 函数。

在 XML 比较报告中导航

XML 比较报告仅显示更改。该报告是两个 XML 文本文件之间差异的分层视图,而不是原始 XML 数据的分层视图。

逐一查看不同之处,请使用工具条上的比较选项卡。要转到下一组或上一组差异,请在比较选项卡上的导航部分中,点击箭头按钮转到上一项或下一项差异。

您也可以在层次结构树中通过点击选择各项。

  • 所选项在框中突出显示。

  • 如果所选项是匹配对组的一部分,则该项会在左右两侧树的框中同时突出显示。

报告项的突出显示反映了各项差异的性质,具体如下所示:

报告项的类型高亮显示注释
已修改紫色

已修改的项是两个文件之间存在差异的匹配对组。当您选择已修改的项时,它会在两侧树的框中同时突出显示。
所选对组中已经更改的参数会显示在下方。

插入项蓝色

当您选择不匹配的项时,它仅在一侧树的框中突出显示。

删除项黄色
容器

没有突出显示的行表示一个容器项,其中包含其他经过修改或不匹配的项。

使用比较选项卡可执行以下功能:

  • 刷新 - 再次运行查瓦特分析以刷新比较报告。

  • 交换位置 - 交换位置并重新运行比较。再次运行查瓦特分析。

  • 另存为 > HTML - 打开“保存”对话框,您可以在其中选择保存可打印版本的 XML 比较报告。该报告包含由查瓦特算法检测到的差异,是非交互式 HTML 文档,用于打印或存档比较记录。

  • 另存为 > 工作区变量 - 将 XML 比较结果导出到工作区。

  • Navigate 部分中,点击箭头按钮(或按向上键或向下键)转到上一项差异或转到下一项差异。

  • 比较选定参数 - 打开针对当前选定参数对组的新报告。当报告不能在“参数”窗格中显示所有详细信息时(例如,脚本或长字符向量),使用此选项。

使用工具条上的视图选项卡控件可执行以下功能:

  • 全部展开 - 展开树中的每个项。

    提示

    右键点击可展开或折叠所选树节点中的层次结构。

  • 全部折叠 - 将树中的所有项折叠为尽可能紧凑的视图。

注意

如果文件中原本对应的部分现在差异过大,则分析可能无法检测其匹配情况。

将比较日志文件保存在 Zip 文件中

临时 XML 比较文件会在 tempdir/MatlabComparisons/XMLComparisons/TempDirs/ 中累积。当您关闭相关的比较报告时,这些临时文件将同时删除。

您可以压缩在 XML 比较期间创建的临时文件(如日志文件),以用于共享或存档。在比较报告打开时,输入:

xmlcomp.zipTempFiles('c:\work\myexportfolder')

目标文件夹必须存在。输出会报告 zip 文件名称:

Created the zipfile "c:\work\myexportfolder\20080915T065514w.zip"

要在 MATLAB® 编辑器中查看上次比较的日志文件,请输入:

xmlcomp.showLogFile

将结果导出到工作区

要将 XML 比较结果导出到 MATLAB 基础工作区,请执行下列操作:

  1. 比较选项卡的比较部分中,选择另存为 > 工作区变量

    “输入变量名称”对话框将出现。

  2. 在该对话框中指定导出对象的名称,然后点击确定。此操作会将 XML 比较的结果导出到工作区中的 xmlcomp.Edits 对象。

xmlcomp.Edits 对象包含有关 XML 比较的信息,其中包括文件名、应用的过滤器和两个 XML 文件之间不同的层次结构节点。

要在命令行中创建 xmlcomp.Edits 对象而不打开比较工具,请输入:

Edits = xmlcomp.compare(a.xml,b.xml) 

xmlcomp.Edits 的属性描述
Filters过滤器结构体数组的数组。每个结构体都有两个字段,即“名称”和“值”。
LeftFileNameXML 比较中左侧文件的文件名。
LeftRoot引用左侧树根的 xmlcomp.Node 对象。
RightFileNameXML 比较中右侧文件的文件名。
RightRoot引用右侧树根的 xmlcomp.Node 对象。
TimeSaved结果导出到工作区的时间。
Versionxmlcomp.Edits 对象的 MathWorks® 版本号。
xmlcomp.Node 的属性描述
Childrenxmlcomp.Node 所引用的子节点构成的数组(如果有)。
Edited布尔值 - 如果 Edited = true,则节点是插入项或是经过修改的匹配对组的一部分。
Name节点的名称。
Parameters参数结构体数组的数组。每个结构体都有两个字段,即“名称”和“值”。
Parentxmlcomp.Node 所引用的父节点(如果有)。
Partner如果匹配,Partner 是对另一个树中匹配的伙伴节点的 xmlcomp.Node 引用。否则为空,即 []

另请参阅

主题