2013-03-06 5 views
0

Dans DOM4J et XML, comment ajouter un nœud à un nœud existant?Ajouter un nœud à un nœud XML dom4j

Si je suis l'exemple c'est très facile et fonctionne très bien si j'ai déjà un élément.

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

et ainsi de suite. Facile si j'ai un objet Element.

Mais une fois que je perds une référence ou que je charge un fichier XML sans en créer un à partir de zéro, je ne peux pas comprendre comment j'ajoute un nœud/élément exactement où je veux. La question spécifique est: Étant donné un document et un élément spécifique, comment ajouter un élément en dessous? Dois-je parcourir tout le document? Xpath Je peux seulement obtenir de renvoyer des noeuds qui n'ont aucun .addElement et je ne peux pas le transformer en élément. Je suis simplement perplexe et en dehors de l'ajout d'un ID =? à chaque nœud que je ne peux pas comprendre comment mettre quelque chose exactement où je veux aller. Toute aide ou direction serait grandement appréciée.

Répondre

2

Vous pouvez itérer et vérifier le noeud requis et y ajouter le noeud que vous venez de créer ou vous pouvez utiliser l'expression et xpath pour obtenir le noeud particulier et lui ajouter un nouveau noeud.

Iteration:

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

Comment puis-je ajouter un nœud dans cette boucle? nœud.??? Theres aucune méthode pour en ajouter un. – user1681732

+0

Le noeud peut être casté en élément, voir ma mise à jour. –

+0

Merci beaucoup. – user1681732

Questions connexes