# mit dom4j einen dom teilweise kopieren?



## SBehnen27 (14. Jul 2008)

Ich habe folgende Situation:

Ein Document hat nur den Root-Knoten:

```
<Result/>
```

Ein weiteres Document hat diverse Knoten:

```
<File>
  <Resource id="foo">
    <Attribute id"a1">foo</Attribute>
    <Attribute id"a2">bar</Attribute>
    <Attribute id"a3">foobar</Attribute>
 </Resource>
 <Resource id="bar">
    <Attribute id"b1">foo1</Attribute>
    <Attribute id"b2">bar2</Attribute>
    <Attribute id"b3">foobar3</Attribute>
  </Resource>
</File>
```

Ich gehe nun das zweite Document durch und überprüfe die Knoten auf deren Inhalt. Wenn bestimmte Regeln zutreffen, soll der komplette Resource-Knoten übernommen werden - und zwar in den <Result>-Dom.

Eine Möglichkeit, ein Element an ein Root-Element anzufügen habe ich gefunden - und die wird wohl standard sein:


```
Element author1 = root.addElement( "author" )
      .addAttribute( "name", "James" )
      .addAttribute( "location", "UK" )
      .addText( "James Strachan" );
```

Das ist jetzt natürlich recht viel Arbeit und ich frage mich, ob man nicht ein komplettes Element, das schon fertig ist, an ein Element anhängen kann...
Muss ich echt jedes Attribut und jedes Element durchgehen und einzeln erstellen?


----------



## SBehnen27 (15. Jul 2008)

und gleich noch eins hinterher:
Wie merge ich zwei Dokumente?

beide haben den gleichen Root Knoten - am Ende soll ein Dokument übrig bleiben, das einen Root-Knoten, aber alle Ergebnisse enthält...

Rätselhaft, sebo


----------



## BjörnBu (15. Jul 2008)

möglich, dass ich dich falsch verstehe...
Aber ich versuch mal mein Glück. 

org.dom4j.Element hat die methode add(Element element). Damit sollte es gehen.

Deine zweite Frage kann ich so nicht direkt beantworten. Theoretisch kannst du wieder genauso Elemente hinzufügen wie oben. Allerdings musst du selbst wissen, wie gemergt werden soll. Wenn du einfach nur alle direkten Kinder vom Root in einem Dokument vereinigen willst, ist's ja trivial. 

Wenn du eine Art ID an deinen Elementen hast und dann auf unterschiedlichen Ebenen deines DOM Baumen Elemente hinzufügen willst, wird's kompliziert. Wie genau das geht hängt wohl von deinen Anforderungen ab


----------



## SBehnen27 (15. Jul 2008)

letzteres hab ich schon gefunden. appendContent() ists.
Ich finde die Benamung teilweise eigenartig und finde deswegen des öfteren nicht, was ich suche.


----------



## SBehnen27 (21. Jul 2008)

ich dachte, ich hätte es... 
wenn ich an ein element mit appendContent etwas anhänge, dann mache ich damit die Struktur kaputt, kann das sein?


----------

