我正在执行两个xml文件的xml合并。 xmlSrc将合并到xmlDest
中代码看起来像
def xmlSrc = new XmlSlurper(false,false).parse(srcFile)
def xmlDest = new XmlSlurper(false,false).parse(destFile)
xmlSrc.children().each{
if(xmlDest.children().contains(it) == false){
log "Merging entry ${groovy.xml.XmlUtil.serialize(it)}"
xmlDest << it
}else{
log "not merging: ${groovy.xml.XmlUtil.serialize(it)}"
}
}
Src XML看起来像:
<?xml version = '1.0' encoding = 'UTF-8'?>
<MetadataDirectory xmlns="http://xmlns.oracle.com/adfm/metainf" version="11.1.1.0.0">
<BusinessComponentProjectRegistry path="val1"/>
</MetadataDirectory>
Dest看起来像
<?xml version = '1.0' encoding = 'UTF-8'?>
<MetadataDirectory xmlns="http://xmlns.oracle.com/adfm/metainf" version="11.1.1.0.0">
<BusinessComponentProjectRegistry path="val2"/>
</MetadataDirectory>
我希望我的代码在合并时找不到匹配项并插入节点。但是,它总是回归真实。
答案 0 :(得分:1)
所以你需要比较节点的名称和属性,你不能只比较节点。
xmlSrc.children().each { srcChild ->
if(xmlDest.children().find { it.name() == srcChild.name() && it.attributes() == srcChild.attributes() }){
println "not merging: ${XmlUtil.serialize(srcChild)}"
}
else {
println "Merging entry ${XmlUtil.serialize(srcChild)}"
xmlDest << srcChild
}
}
请记住,对于这个确切的用例,这是一个非常简单的解决方案。实际上,您的BusinessComponentProjectRegistry
个节点可能包含其他节点...您想走多远,看看它们是否相同?例如,在xml中可能存在5个分支的差异