2013-03-06 9 views
0

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

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

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

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

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

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

ответ

2

Вы можете либо перебрать и проверить нужный узел, либо добавить к нему вновь созданный узел, либо использовать выражение 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"); 
       .... 
      } 
     } 
} 
+0

Как добавить узел в том, что для цикла? узел.??? Нет метода для добавления. – user1681732

+0

Узел может быть отправлен в Элемент, см. Мое обновленное сообщение. –

+0

Спасибо вам большое. – user1681732

Смежные вопросы