2012-04-11 89 views
4

我有两个XML文件。这两个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)上工作。

回答

1

对于Perl解决方案,请查看相关的CPAN模块。 XML::Diff是最明显的,似乎做你需要什么,但有several尝试,如果这不适合你。

+0

感谢您的链接。我完成了我的工作。 – AnonGeek 2012-04-12 10:30:16

+0

只需快速更新“多个”链接即可:https://www.google.nl/search?q=cpan+xml+diff – Jelmer 2014-05-19 08:22:44

2

我曾经写过一个模块,做类似的东西(不optomized但它确实为我做的伎俩)

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

感谢您的链接。虽然这不是我想要的,但它会帮助我。 – AnonGeek 2012-04-12 10:29:36

相关问题