добавить узел в узел XML dom4j

В DOM4J и XML как добавить узел к существующему узлу?

Если я следую примеру, это очень просто и отлично работает, если у меня уже есть элемент.

Element root = doc.getRootElement();
Element someElement = root.addElement("some");
Element anotherElement = someElement.addElement("another");

и так далее. Легко, если у меня есть объект Element.

но как только я теряю ссылку или загружаю xml, а не создаю его с нуля, я просто не могу понять, как добавить узел/элемент именно там, где я хочу.

Итак, конкретный вопрос: учитывая документ и определенный элемент в нем, как мне добавить элемент под ним? Должен ли я перебирать весь документ? Xpath я могу получить только для возврата узлов, у которых нет .addElement, и я не могу превратить его в элемент. Я просто в тупике, кроме добавления ID=? для каждого узла я просто не могу понять, как поместить что-то именно туда, куда я хочу. Любая помощь или направление будет принята с благодарностью.


person user1681732    schedule 06.03.2013    source источник


Ответы (1)


Вы можете выполнить итерацию и проверить требуемый узел и добавить к нему вновь созданный узел, или вы можете использовать выражение и выражение xpath, чтобы получить конкретный узел и добавить к нему новый узел.

Итерация:

    public void iterateNodes() {
     SAXReader reader = new SAXReader();
     Document document = reader.read("yourxml.xml");
     Element root = document.getRootElement();
     for ( Iterator i = root.elementIterator(); i.hasNext(); ){
           Element row = (Element) i.next();
           Iterator itr = row.elementIterator();
           while(itr.hasNext()) {
                Element child = (Element) itr.next();
                String name = child.getQualifiedName();
                if(name.equals("requiredName") {
                   //create node and add it to child.
                }   
           }
     }
 }

XPath:

public void addNodeUsingXpath() {
    SAXReader reader = new SAXReader();
     Document document = reader.read("yourxml.xml");
        String xpathExpression = "yourxpath";
        List<Node> nodes = document.selectNodes(xpathExpression);
        // nodes will have all the child nodes under your Xpath.
        for (Node node : nodes) {
           //get the required node and add your new node to specific node.
            if(node instanceof Element) {
                 Element e = (Element) node;
                 e.addElement("newElement");
                 ....
            }
        }
}
person RP-    schedule 06.03.2013