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

Php 比较两个结构相同的XML文件并找出差异,php,javascript,xml,perl,diff,Php,Javascript,Xml,Perl,Diff,我有两个XML文件。两个XML文件的结构如下所示: <file1> <table> <name>...</name> <columns> <col> <name>...</name>

我有两个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文件将具有相同的表,但列数可能不同。我试图做的是比较每个表的每一列,找出type和fkey中的差异(如果有)。我还想知道第二个XML文件中缺少哪些列。我想将此信息保存到另一个文件(可以是任何格式)

我知道Perl、PHP和JavaScript,但我以前从未使用过XML

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


编辑:我正在Linux平台(RedHat)上工作。

有关Perl解决方案,请查看相关的CPAN模块。是最明显的,似乎能满足您的需要,但如果这对您不起作用,就可以尝试。

我曾经写过一个模块,它做了一些类似的事情(没有经过优化,但它确实为我做到了这一点)


谢谢你的链接。虽然这不是我想要的,但它会帮助我。只需快速更新“几个”链接:
  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);