2012-04-11 167 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

相關問題