xml文档的比较与更新

时间:2021-07-09 08:58:22

目的:

为了解决两个XML文件内容的比较与更新,达到以其中的一个文件为样本来对照修改另一文件,实现文件的更新。

<span style="white-space:pre"></span>//比较connectionConfig文件
private String comparaConXml(Document yc_doc,Document bz_doc) {
String XMBBH="";
Element rootEl=bz_doc.getRootElement(); //获取标准文件中的根节点
for (Iterator bz_it = rootEl.elementIterator("XMXX"); bz_it.hasNext();) {
Element child = (Element) bz_it.next();
XMBBH=child.element("BBH").getText();
}
//循环遍历远程文件,判断该节点是否存在
Node node=yc_doc.selectSingleNode(rootEl.getName());
if(node==null){
//不存在根节点,将根节点及之后的节点都加上
Element yc_rootEl=yc_doc.addElement(rootEl.getName());
for (Iterator it = rootEl.elementIterator(); it.hasNext();) {
Element child = (Element) it.next();
addNode(child, yc_rootEl);
}
}else {
//存在根节点,遍历根节点下的子节点
Element yc_rootEl=yc_doc.getRootElement(); //获取客户文件中的根节点
for (Iterator it = rootEl.elementIterator(); it.hasNext();) {
Element bz_node = (Element) it.next();
if(yc_rootEl.element(bz_node.getName())==null){
//添加节点及其子节点
addNode(bz_node, yc_rootEl);
}else {
//存在节点
Element yc_node=yc_rootEl.element(bz_node.getName());
isChild(bz_node, yc_node);
}
}
}
return XMBBH;
}
//添加节点
private void addNode(Element node,Element yc_pNode) {
//判断标准该节点是否有孩子节点
if(node.elementIterator().hasNext()){
//若有孩子节点,则遍历其孩子节点
Element yc_node=yc_pNode.addElement(node.getName());//添加子子节点
for (Iterator childEL=node.elementIterator();childEL.hasNext();) {
Element child=(Element)childEL.next();
addNode(child,yc_node);
}
}else {
//若没有孩子节点,则添加该节点及其节点内容
Element yc_node=yc_pNode.addElement(node.getName());//添加子节点
yc_node.setText(node.getText());//添加子子节点内容
}
}
//判断节点是否存在
private void isChild(Element node,Element yc_node) {
//判断该节点下的子节点是否有孩子节点,若没有孩子节点,判断该子节点是否存在,若不存在则添加
//若有孩子节点,循环孩子节点
if(node.elementIterator().hasNext()){
for (Iterator bz_it= node.elementIterator(); bz_it.hasNext();) {
Element bz_child = (Element) bz_it.next();
if(yc_node.element(bz_child.getName())==null){
addNode(bz_child, yc_node);
}else {
Element yc_child=yc_node.element(bz_child.getName());
isChild(bz_child, yc_child);
}
}
}else {
for(Iterator bz_it=node.elementIterator();bz_it.hasNext();){
Element bz_child = (Element) bz_it.next();
if (yc_node.element(bz_child.getName())==null) {
Element yc_child=yc_node.addElement(bz_child.getName());//添加子子节点
yc_child.setText(bz_child.getText());//添加子子节点内容
}
}
}
}