void (Element to, Element from) { List<Element> children = from.getChildren(); Map<Pair<String, String>, Element> index = createNamedIndex(to); if (children.isEmpty()) { Pair<String, String> key = indexKey(from); Element el = index.get(key); org.jdom.Parent parent = to.getParent(); if (el == null && parent != null) { if (!"".equals(from.getAttributeValue("value"))) { parent.addContent(from.clone()); } parent.removeContent(to); } } else { for (Element child : children) { Element el = index.get(indexKey(child)); if (el != null) { deepMerge(el, child); } else { to.addContent(child.clone()); } } } }