# JAXB: Aus einem Vector oder List  XML Datei erstellen



## ralfz (18. Nov 2008)

Hi,

ich möchte aus einem Vector oder einer Liste, die verschiedene Objekte enthalten kann ein XML File per Jaxb generieren.

Ein Beispiel, das ich gefunden hab, macht das hier:


```
@XmlRootElement(name="target")
     class Target {
         // The presence of @XmlElementRef indicates that the XML
         // element name will be derived from the @XmlRootElement 
         // annotation on the type (for e.g. "jar" for JarTask). 
         @XmlElementRef
         List tasks;
     }

     abstract class Task {
     }

     @XmlRootElement(name="jar")
     class JarTask extends Task {
         ...
     }

     @XmlRootElement(name="javac")
     class JavacTask extends Task {
         ...
     }
```

zu:


```
// mit
Target target = new Target();
     target.tasks.add(new JarTask());
     target.tasks.add(new JavacTask());

// ZU:
<target>
       <jar>
         ....
       </jar>
       <javac>
         ....
       </javac>
</target>
```

ABER: Wie macht man das ohne die XMLRootElement Tags, also mit normalen Element? Geht das überhaupt?

Also Bsp.


```
Vector mylist =new Vector();
mylist.add(new A());
mylist.add(new B());
mylist.add(new B());
mylist.add(new A());
//...

@XmlElementWrapper(name="liste")
public List getMylist() {};
```
Also beliebige Objekte.

Wenn ich das Ausgeben lasse bekomme ich in etwa das hier:

```
<liste>
     <mylist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="a" id="999">loses a_999</mylist>
     <mylist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="b">
         <isbn>978-0060554736</isbn>
         <name>The Game</name>
         <author>Neil Strauss</author>
         <publisher>Harpercollins</publisher>
     </mylist>
     <mylist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="a" id="999">loses a_999</mylist>
     <mylist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="a" id="999">loses a_999</mylist>
     <mylist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="b">
         <isbn>978-0060554736</isbn>
         <name>The Game</name>
         <author>Neil Strauss</author>
         <publisher>Harpercollins</publisher>
     </mylist>
 </liste>
```

Ich hätte das aber eben lieber wie oben, bzw. mit "richtigen" Knoten.

Wie mache ich das?

Gruß
Zirni


----------



## ralfz (18. Nov 2008)

Gerade gelöst:

mit


```
//Liste mit verschiedenen Elementen
@XmlElementWrapper(name="Sammlung")
@XmlElements({
    @XmlElement(name="Book", type=Book.class),
    @XmlElement(name="Paper", type=Paper.class)
    })
public List getLoseSammlung(){
return lose;
}
```

bekomme ich bei 

```
List lose = new Vector();
Paper paper = new Paper();
// paper.set...

Book book = new Book();
// book.set...

lose.add(paper);
lose.add(book);
lose.add(paper);
lose.add(paper);
lose.add(book);
```

das hier:

```
<Sammlung>
     <Paper id="999">loses Paper_999</Paper>
     <Book>
         <isbn>978-0060554736</isbn>
         <name>The Game</name>
         <author>Neil Strauss</author>
         <publisher>Harpercollins</publisher>
     </Book>
     <Paper id="999">loses Paper_999</Paper>
     <Paper id="999">loses Paper_999</Paper>
     <Book>
         <isbn>978-0060554736</isbn>
         <name>The Game</name>
         <author>Neil Strauss</author>
         <publisher>Harpercollins</publisher>
     </Book>
 </Sammlung>
```

  Fertig....

Gruß
Zirni


----------

