private void processElementChildren( final Element element, final String key, final Map<String, String> properties) { for (int i = 0, size = element.nodeCount(); i < size; i++) { Node node = element.node(i); if (logger.isDebugEnabled()) { logger.debug(String.format("Processing xml element %s", node.getPath())); } if (node instanceof Element) { StringBuilder sbPrefix = new StringBuilder(key); if (sbPrefix.length() > 0) { sbPrefix.append("."); } sbPrefix.append(node.getName()); if (!excludeProperties.contains(sbPrefix.toString())) { processElementChildren((Element) node, sbPrefix.toString(), properties); } } else { StringBuilder sb = new StringBuilder(); if (properties.containsKey(key)) { sb.append(properties.get(key)); if (sb.length() > 0) { sb.append(multivalueSeparator); } } String value = node.getText(); if (StringUtils.isNotBlank(value)) { if (logger.isDebugEnabled()) { logger.debug(String.format("Adding value [%s] for property [%s].", value, key)); } sb.append(value); properties.put(key, StringUtils.trim(sb.toString())); } } } }