# xml Element ersetzen



## freehawk (31. Aug 2017)

Hallo zusammen,
ich tappe gerade irgendwie ein wenig im Nebel. Ich habe eine große XML Stuktur in einen JDOM Document und eine zweite kleinere Stuktur.
Nun möchte ich die zweite XML in die große an der richtigen Stelle einfügen. Dazu suche ich nach dem Element wo die XML ersetzt werden soll und dann möchte ich das Element mit seinen Unterelement durch ein anderes Document ersetzten. 
Ich finde irgendwie die richtigen Methoden nich um das zu tun.


```
private Element findTag ( Element root, String tag )
    {
        if( root == null )
        {
            return null;
        }
       
        debug.print ( 3 , "Suchen nach: " + tag );
       
        List<?> enumChilds = root.getChildren();
        Iterator<?> iter = enumChilds.iterator();
        while( iter.hasNext( ))
        {
            Element childElement = (Element)iter.next();
           
            debug.print ( 3 , childElement.getName() );
           
            if( childElement.getName().equals( tag ) )
            {
                return childElement;
            }
            try
            {
                Element foundElement = this.findTag( childElement , tag );
                if ( foundElement != null )
                {
                    return foundElement;
                }
            }
            catch (IllegalArgumentException e)
            {           
                debug.print( 1 , "findTag Fehler: " + e.getMessage() );
            }
        }
        return null;
    }
```

Damit suche ich nach dem Element, das klappt auch nur das ersetzen von dem Element bekomme ich nicht hin. Vermutlich ist es nicht so schwer nur ich finde bei Google nicht den passenden Beitrag.

Kann mir jemand weiterhelfen?

Danke


----------



## lordofdonuts (31. Aug 2017)

Hallo freehawk,

wie meinst du, du bekommst es nicht hin? Findest du keinen Ansatz, oder kommt eine Fehlermeldung?

Generell musst du solche Aenderungen ueber den parent-Node spielen. D.h. du brauchst von foundElement den Parent. Dieser sollte eine Methode namens replaceElement anbieten.

Beispiel siehe hier:
http://www.java2s.com/Code/Java/XML/JavaDOMeditReplacinganExistingNodewithaNewOne.htm


----------



## freehawk (1. Sep 2017)

ich habe es so versucht allerdings löscht er weder das Element noch wird was eingefügt:


```
element = this.findTag( element, valueName );
       
        debug.print( 2, "Element: " + element.toString() );
       
        this.writeXMLFile( d, "_vorher.xml" );
       
        d.removeContent(element);
       
        this.writeXMLFile( d, "_nachloeschen.xml" );
       
        element = d.getRootElement();
       
        element.setContent( neu.getRootElement() );
       
        this.writeXMLFile( d, "_danach.xml" );
```


----------



## freehawk (1. Sep 2017)

Die Methode wie in dem Beispiellink funktioniert bei mir nicht.

root.replaceChild(newPersonNode,oldPersonNode);

Kann es sein, dass diese Methode aus JDOM ist? Ich benutze JDOM2. Gibts da was vergleichbares?


----------



## lordofdonuts (1. Sep 2017)

Du hast da was falsch verstanden, dein Parent-Node ist nicht unbedingt der root-Node. Du brauchst den Parent-Node von dem Knoten, welcher von "findTag" gefunden wurde.


----------



## freehawk (1. Sep 2017)

Ja das waren meiner Versuche vor meinem Post hier.

Jetzt klappt schon mehr und ich bekomme es noch vollens hin.

Danke


----------

