如何比较2 xml字符串?

时间:2012-08-31 07:01:31

标签: java xml diff

我对在java中比较2个xml字符串有非常具体的要求。我有2个xml字符串。原创和修改。我需要将原始的xml字符串与修改后的字符串进行比较,并找出已修改的内容。

例如:

原始xml是

   <Mycontacts>
        <contact>
           <firstName>Robert</firstName>
           <PhoneNumber>9053428756</PhoneNumber>
           <lastName>Bobbling</lastName>
           <mobile>4168014523</mobile>
        </contact>
        <contact> 

           <firstName>Lily</firstName>
           <PhoneNumber>9053428756</PhoneNumber>
           <lastName>Bobbling</lastName>
           <mobile>4168014523</mobile>
        </contact>
    </Mycontacts>

修改后的xml:

    <Mycontacts>
        <contact>
           <firstName>Robert</firstName>
           <PhoneNumber>40454321333</PhoneNumber>
           <lastName>Bobbling</lastName>
           <mobile>4168014523</mobile>
        </contact>
      </Mycontacts>

由于此处修改了1个联系人并且删除了1个id,因此我希望形成2个xml的树。 1是modify_xml,1是delete xml

修改xml:

     <contact>

            <firstName>Robert</firstName>
        <PhoneNumber>40454321333</PhoneNumber>
        <lastName>Bobbling</lastName>
           <mobile>4168014523</mobile>
        </contact>

删除xml:

     <contact>
           <name>Lily</name>
      </contact>

如何使用java API完成此操作?解析每个节点并为每个联系人条目创建地图是一个不错的选择吗?

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

我会将XML文件解析为Java对象并进行比较,假设XML布局不随时间而变化。您可以使用XStreamJAXB来执行此操作。

答案 2 :(得分:0)

在一般情况下非常困难的问题,例如,如果您想检测元素名称已更改但值保持不变,或者您想要检测到两个元素仍然存在但订单已经逆转。如果你对数据的结构有所了解,那就容易多了,例如,你能够区分哪些值作为标识符,所以问题减少到在另一个文件中找到一个具有相同标识符的元素然后询问哪个它的非识别属性已经改变。

关键是,在尝试设计之前,您需要更多地了解需求。