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

4

我有两个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文件之间的差异?
编辑:我正在Linux平台(RedHat)上工作。
2个回答

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);

谢谢您提供的链接。虽然那不是我所需要的确切内容,但它对我有所帮助。 - AnonGeek

1

如果您需要Perl解决方案,请查看相关的CPAN模块。XML::Diff是最明显的选择,似乎可以满足您的需求,但如果这不适用于您,还有其他几个可供尝试。


关于“几个”链接的最新更新:https://www.google.nl/search?q=cpan+xml+diff - Jelmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接