比较具有相同结构的两个XML文件并找出差异

时间:2012-04-11 11:17:44

标签: php javascript xml perl diff

我有两个XML文件。两个XML文件的结构如下:

<file1>
       <table>
              <name>...</name>
              <columns>
                       <col>
                             <name>...</name>
                             <type>...</type>
                             <fkey>...</fkey>
                       </col>
                       <col>
                             <name>...</name>
                             <type>...</type>
                             <fkey>...</fley>
                       </col>
               <columns>
       </table>
      <table>
              <name>...</name>
              <columns>
                       <col>
                             <name>...</name>
                             <type>...</type>
                             <fkey>...</fkey>
                       </col>
                       <col>
                             <name>...</name>
                             <type>...</type>
                             <fkey>...</fley>
                       </col>
               <columns>
       </table>
 </file1>

两个XML文件都有相同的表,但列数可能不同。我要做的是比较每个表的每一列,找出类型和fkey的差异(如果有的话)。另外,我想知道第二个XML文件中缺少哪些列。我想将此信息保存到另一个文件(它可以是任何格式)。

我知道Perl,PHP和JavaScript但我之前没有使用过XML。

现在我想知道的是从哪里开始以及使用哪些工具?做上述任务的最佳方法是什么?是否有任何模块提供在两个XML文件之间执行diff的函数?

编辑:我正在使用Linux平台(RedHat)。

2 个答案:

答案 0 :(得分:2)

我曾经写过一个模块,它做了类似的事情(没有进行优化,但确实为我做了伎俩)

http://ekawas.blogspot.ca/2008/11/comparing-xml-documents-semantically.html

  use XML::SemanticCompare;
  my $x = XML::SemanticCompare->new;

  # compare 2 different files
  my $isSame = $x->compare($control_xml, $test_xml);
  # are they the same
  print "XML matches!\n"
    if $isSame;
  print "XML files are semantically different!\n"
    unless $isSame;

  # get the diffs
  my $diffs_arrayref = $x->diff($control_xml, $test_xml);

答案 1 :(得分:1)

对于Perl解决方案,请查看相关的CPAN模块。 XML::Diff是最明显的,似乎可以满足您的需求,但如果这对您不起作用,可以several进行尝试。

相关问题