2012-08-31 125 views
0

我有一个非常具体的需求比较在Java中的2个XML字符串。我有2个xml字符串。原始和修改。我需要将原始的xml字符串与修改后的字符串进行比较,并找出修改的内容。如何比较2个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个是删除XML

修改XML:

 <contact> 

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

删除XML:

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

怎么可以这样使用的Java API的做什么?解析每个节点并为每个联系人条目创建一个映射是一个不错的选择?

+0

一般来说,你必须建立一个排序树来比较xml数据,但在你的情况下,地图是否足够 – Hachi

回答

1

我会解析XML文件,Java对象和比较这些,假设XML布局不随时间变化。您可以使用XStreamJAXB来做到这一点。

0

在一般情况下非常困难的问题,例如,如果要检测元素名称已更改但值保持不变,或者如果要检测两个元素仍然存在但订单已存在被扭转。如果你知道关于数据结构的一些东西,并且例如你能够区分哪些值作为标识符,那么这会容易得多,所以问题简化为在具有相同标识符的另一个文件中查找元素,然后询问其非识别性质已经改变。

重要的一点是,您需要在尝试设计之前对需求进行更多的说明。