java多个xml文件合并
例如:有2个xml文件。 a.xml和b.xml 把b.xml和a对比,如果相同则不覆盖如果不同,则吧不同的复制过去形成新的a.xml文件
a.xml:
<conf>
<performance>CPU_USED_PERCENT</performance>
<evtConf>
<evt col="DVC_NAME" id="A" key="DVC_NAME" name="设备名称"/>
<evt col="DVC_TYPE" id="b" key="DVC_TYPE" name="设备类型"/>
</evtConf>
<collect>
<dev ip="10.1.128.53" isOnsite="true" type="FW">
<dvc_att key="checked"/>
<att>
<attention name="H" value="0"/>
<attention name="I" value="0"/>
<attention name="L" value="0"/>
</dev>
</collect>
</conf>
<conf>
<performance>CPU_USED_PERCENT</performance>
<evtConf>
<evt col="DVC_NAME" id="A" key="DVC_NAME" name="设备名称"/>
<evt col="DVC_TYPE" id="b" key="DVC_TYPE" name="设备类型"/>
</evtConf>
<collect>
<dev ip="10.1.128.225" isOnsite="true" type="FW">
<dvc_att key="checked"/>
<att>
<attention name="H" value="0"/>
<attention name="I" value="0"/>
<attention name="L" value="0"/>
</dev>
</collect>
</conf>
<conf>
<performance>CPU_USED_PERCENT</performance>
<evtConf>
<evt col="DVC_NAME" id="A" key="DVC_NAME" name="设备名称"/>
<evt col="DVC_TYPE" id="b" key="DVC_TYPE" name="设备类型"/>
</evtConf>
<collect>
<dev ip="10.1.128.53" isOnsite="true" type="FW">
<dvc_att key="checked"/>
<att>
<attention name="H" value="0"/>
<attention name="I" value="0"/>
<attention name="L" value="0"/>
</dev>
<dev ip="10.1.128.225" isOnsite="true" type="FW">
<dvc_att key="checked"/>
<att>
<attention name="H" value="0"/>
<attention name="I" value="0"/>
<attention name="L" value="0"/>
</dev>
</collect>
</conf>
public static void main(String...args) throws Exception{
SAXReader saxReader=new SAXReader();
Document a=saxReader.read(new File("a.xml"));
Document b=saxReader.read(new File("b.xml"));
List<Element> elements=b.selectNodes("/conf/collect/dev");
Element parent=(Element)a.selectSingleNode("/conf/collect");
for(Element element:elements){
String ip=element.attributeValue("ip");
Element old=(Element)a.selectSingleNode("/conf/collect/dev[@ip='"+ip+"']");
if(old!=null) parent.remove(old);
parent.add(element.detach());
}
System.out.println(a.asXML());
}