Я читаю XML-файл на Java, полученный из внешней системы, затем обрабатываю его и, в конечном счете, сохраняю его локально и развертываю обратно.
Внешняя система предоставляет мне XML-файл, который содержит этот узел:
<customApplications>
<label><!-- GDPR Management --></label>
<name>GDPR_Management</name>
</customApplications>
Проблема в узле комментариев.Когда я читаю файл и затем просто сохраняю его, результат выглядит следующим образом:
<customApplications>
<label>
<!-- GDPR Management -->
</label>
<name>GDPR_Management</name>
</customApplications>
Что является проблемой, потому что когда я развертываю файл обратно во внешнюю систему, он теперь думает, что метка имеетнекоторый текстовый контент.Поэтому мне нужен тот же результат, что и был, то есть без разрывов строк вокруг узла комментария.
Я попытался удалить все узлы комментария, что хорошо работает при развертывании файла, но файл также имеет версию с использованиемgit, и это вызывает много конфликтов слияния, поскольку файл может быть в любой момент снова извлечен из внешней системы (извлеченный файл снова с узлами комментариев, как вы можете видеть в первом примере).
Затем я попыталсяизменить все узлы комментариев на текстовые узлы перед сохранением.Результат снова неприемлем, потому что метка снова имеет некоторое текстовое содержание:
<customApplications>
<label><!-- GDPR Management --></label>
<name>GDPR_Management</name>
</customApplications>
Как я читаю документ:
var docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
var document = docBuilder.parse(inputStream);
document.getDocumentElement().normalize();
var xp = XPathFactory.newInstance().newXPath();
var nl = (NodeList) xp.evaluate("//text()[normalize-space(.)='']", document, XPathConstants.NODESET);
for (int i = 0; i < nl.getLength(); ++i) {
var node = nl.item(i);
node.getParentNode().removeChild(node);
}
Как я сохраняю документ:
var result = new StreamResult(outputStream);
var transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
transformer.setOutputProperty(OutputKeys.VERSION, "1.0");
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.transform(new DOMSource(document), result);
Мне действительно нужен тот же результат, что и в первом примере, но мне все равно, как узел комментариев будет представлен в dom при обработке файла.
Спасибо за любые советы!