Ниже код моей функции. Возможно, моя проблема заключается в том, что я неправильно понял как работает 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);
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Объясните, пожалуйста, что значит modeladdAttribute("some text", someObject);
Есть приложение в котором можно выполнять скрипты на JSЗадача - из этого приложения отправлять e-mail