При создании нового узла и добавлении в существующий XML -документ с использованием приведенного ниже фрагмента кода
выражение XPath, например «rootNode / parentNode1 / parentNode2 / childNode»
private static Node createParentNode(Document xmlDocument, String expression, String parentRootXPath)
throws XPathExpressionException {
final String childXPath = (expression.replace(parentRootXPath, "")).replaceFirst("/", "");
final StringBuilder parentPathBuilder = new StringBuilder(parentRootXPath);
Arrays.stream(childXPath.split("/")).forEach(childNodeName -> {
try {
Node parentNode = getNode(xmlDocument, parentPathBuilder.toString());
Node childNode = xmlDocument.createElement(childNodeName);
parentPathBuilder.append("/").append(childNodeName);
parentNode.appendChild(childNode);
} catch (XPathExpressionException e) {
LOGGER.error("Unable to create Node {}", parentPathBuilder.toString());
}
});
return getNode(xmlDocument, expression);
}
private static Node getNode(Document xmlDocument, String expression) throws XPathExpressionException {
return (Node) X_PATH.compile(expression).evaluate(xmlDocument, XPathConstants.NODE);
}
Я могу добавить узел, но при разборе тега дополнительного конечного узла создается
<DOCUMENT_SETS>
<DOCUMENT_SPECIFIC_DATA_SET>
<node1>value1</node1>
<new_Node1>value1</new_Node1>
<new_Node2>value1</new_Node2>
</DOCUMENT_SPECIFIC_DATA_SET>
</DOCUMENT_SETS>
<DOCUMENT_SPECIFIC_DATA_SET />
<DOCUMENT_SPECIFIC_DATA_SET />
Вход
<DOCUMENT_SETS>
<DOCUMENT_SPECIFIC_DATA_SET>
<node1>value1</node1>
</DOCUMENT_SPECIFIC_DATA_SET>
</DOCUMENT_SETS>
Ожидаемый результат
<DOCUMENT_SETS>
<DOCUMENT_SPECIFIC_DATA_SET>
<node1>value1</node1>
<new_Node1>value1</new_Node1>
<new_Node2>value1</new_Node2>
</DOCUMENT_SPECIFIC_DATA_SET>
</DOCUMENT_SETS>