如何使用Java比较两个XML文件的不同

3
我有两个XML文件需要比较:
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=105 更新为 ----
最好的方法是如何将这两个 XML 文件进行差异化处理以获得这些结果?

改善你的格式。我曾经试着为你编辑过,但不知何故被拒绝了。 - atomman
1
这个问题表述得太模糊了。你所说的“我遇到了一些问题”,是指你遇到了具体的问题,还是只是想让别人告诉你如何实现检测元素更新?(看起来你想通过id来检测更新,但这并没有通用的解决方案,因为它与XML的结构无关,而是与它在你的应用程序中的含义有关。) - millimoose
3个回答

2

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
    }

0

对于逻辑差异,即两个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");
                        }
                    }

            } 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接