2013-01-10 40 views
2

我有,我想比較兩個XML文件,兩個XML文件:如何DIFF-比較用java

old.xml:

<EMPLOYEES> 
    <employee> 
    <id>102</id> 
    <name>Fran</name> 
    <department> THIS IS COMPUTER DEPARTMENT </department> 
    </employee> 
    <employee> 
    <id>105</id> 
    <name>Matthew</name> 
    <department> THIS IS SCIENCE AND TECHNOLOGY </department> 
    </employee> 
</EMPLOYEES> 

new.xml:

<EMPLOYEES> 
    <employee> 
    <id>105</id> 
    <name>Matthew</name> 
    <department> THIS IS SCIENCE AND TECHNOLOGY **Modified *** </department> 
    </employee> 
    <employee> 
    <id>106</id> 
    <name>xyz</name> 
    <department> THIS IS SCIENCE AND TECHNOLOGY </department> 
    </employee> 
    <employee> 
    <id>107</id> 
    <name>Francis</name> 
    <department> THIS IS XYZ </department> 
    </employee> 
</EMPLOYEES> 

我想比較兩個文件並返回哪些記錄被添加,刪除或更新。 old.xml包含2 <employee>記錄和new.xml包含3 <employee>記錄。

我想的結果是這樣的:

添加的記錄 2:例如: - employee.id = 106和employee.id = 107

刪除的記錄 1:例如: - employee.id = 102

更新記錄 1:例如: - employee.id = 10 5更新----

什麼是最好的方式來區分這兩個XML文件來獲得這些結果?

+0

改進您的格式。我試着爲你編輯,但不知何故它被拒絕了。 – atomman

+1

這個問題太模糊了。通過「我面臨一些問題」,你的意思是你遇到了一個特定的問題,或者你只是想讓別人告訴你如何實現檢測元素更新? (看起來你想通過'id'來檢測更新,並且沒有真正的通用解決方案,因爲它與XML的*結構*無關,而是它在你的應用程序中的含義。) – millimoose

回答

0

我會做什麼

@XmlRootElement 
class Employees { 
    List<Employee> list; 
} 

class Employee { 
    int id; 
    String name; 
    String department; 
} 

解組個XML。創建2張地圖和做以下

Map<Integer, Employee> map1 = ... 
    Map<Integer, Employee> map2 = ... 
       // see Map.retainAll API 
    map1.keySet().retainAll(map2.keySet()); 
    // now map1 contains common employees 
    for (Integer k : map1.keySet()) { 
     Employee e1 = map1.get(k); 
     Employee e2 = map2.get(k); 
     // compare name and department 
    } 
0

對於邏輯差,相應的節點之間的差,即在兩個XML文件,可以使用該節點類的isEqualNode(節點node)方法。

對於逐行比較,Scanner易於使用。示例代碼 -

public void compareFiles (Scanner file1, Scanner file2) { 
       String lineA ; 
       String lineB ; 

       int x = 1; 

        while (file1.hasNextLine() && file2.hasNextLine()) { 
         lineA = file1.nextLine(); 
         lineB = file2.nextLine(); 

         if (!lineA.equals(lineB)) { 
          System.out.print("Diff " + x++ + "\r\n"); 
          System.out.print("< " + lineA + "\r\n"); 
          System.out.print("> " + lineB + "\r\n"); 
         } 
        } 

      }