3

比較したい 2 つの xml ファイルがあります。

古い.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>

2 つのファイルを比較して、どのレコードが追加、削除、または更新されたかを返したいと考えています。 old.xmlには 2 つ<employee>のレコードnew.xmlが含まれ、3 つ<employee>のレコードが含まれます。

結果が次のようになることを望みます。

追加されたレコード 2: ex:- employee.id=106 および employee.id=107

削除されたレコード 1 : ex:- employee.id=102

更新されたレコード 1: ex:- employee.id=105 で更新された ----

これらの結果を得るために、これら 2 つの XML ファイルを比較する最良の方法は何ですか?

4

3 に答える 3

2

これは Java で 2 つの XML ドキュメントを比較する最良の方法に似ています。XMLUnit をチェックすることをお勧めします。

http://xmlunit.sourceforge.net/

于 2013-01-10T22:14:34.707 に答える
1

私がすること

@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
    }
于 2013-01-11T02:53:28.960 に答える
0

論理的な違い、つまり 2 つの xml ファイル内の対応するノード間の違いについては、ノード クラスの isEqualNode(Node 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");
                        }
                    }

            } 
于 2013-03-25T11:02:04.280 に答える