Ниже код моей функции. Возможно, моя проблема заключается в том, что я неправильно понял как работает insertBefore. Работу этого метода я понял так, insertBefore имеет два параметра: первый параметр - узел, который хотим вставить, второй параметр - перед каким узлом хотим вставить. Вызываем сам метод insertBefore у того узла, для которого нововставленный узел будет дочерним. Если все так, тогда не могу понять, почему данный код не вставляет комментарий там, где нужно.
public static Document addCommentsToDocument(Object obj, String tagName, String comment) throws Exception{
String fileName = new String("/home/albuquerque/XML.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(file);
document.getDocumentElement().normalize();
Node root = document.getDocumentElement();
NodeList listNode = root.getChildNodes();
Comment com = document.createComment(comment);
for (int i = 0; i < listNode.getLength(); i++) {
Node node = listNode.item(i);
root.insertBefore(com, node);
}
return document;
}
Ниже код XML. Перед каждым тегом, кроме родительского нужно вставить комментарий.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<example>
<a>a</a>
<b>b</b>
<string1>string1</string1>
<string2>string2</string2>
</example>
Но вставка происходит такая:
<?xml version="1.0" encoding="UTF-8"?><example>
<a>1</a>
<b>1</b>
<string1>string1</string1>
<string2>string2</string2><!--it's a comment-->
</example>
Что не так я делаю?
Элемент вставлялся неправильно из-за того, что узел-комментарий был один и просто передвигался от одного элемента к другому, передвигаясь к самому последнему внутреннему элементу родительского тега. Решением оказалось создание на каждой итерации нового узла-коммента и добавлением его к нужному элементу.
n.getParentNode().insertBefore(document.createComment(comment), n);
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости