jaxb Vector (oder ähnliches) von Elementen generieren

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Hallo,

folgendes Problem. Ich habe eine XML - Datei, in der die Elemente (SAND, WASSER, ZEMENT) beliebig oft in vorher nicht bekannter Reihenfolge erscheinen. Mir ist bisher keine Umsetzung in ein xml-Schema gelungen, welches die Reihenfolge und das mehrmalige Auftreten der Elemente berücksichtigt, so das jaxb java-Klassen generieren kann. Weiss jemand Rat? Ich habe mal ein Beispiel rangehangen:

<ROOT>
<VERSUCH>
<SAND gewicht="50g" körnung="grob"/>
<WASSER gewicht="100g"/>
<SAND gewicht="50g" körnung="fein"/>
<SAND gewicht="10g" körnung="sehrfein"/>
<ZEMENT gewicht="200g" farbe="weiß">W21</ZEMENT>
</VERSUCH>
<VERSUCH>
<SAND gewicht="50g"/>
<SAND gewicht="50g"/>
<ZEMENT gewicht="75g" farbe="grau">W22</ZEMENT>
<WASSER gewicht="100g"/>
<ZEMENT gewicht="25g" farbe="weiß">W21</ZEMENT>
</VERSUCH>
</ROOT>
 

ralfz

Aktives Mitglied
Hi, willst du "nur" die Objekte nach Java holen, oder brauchst du ein XML Schema? Reicht nicht evtl. auch eine DTD?

Wenn du die Daten nur einlesen willst, dann würde ich einfach die Klassenstruktur per Hand aufbauen, dass ist ja schnell gemacht. (Ich bin allerdings noch ziemlich neu, was JAXB angeht).

Die Struktur wäre dann ja einfach mal kurz überlegt nur: (ohne Gewähr)


Code:
@XmlRootElement(name="ROOT")
class Store{

List<Versuch> listv;
}

class Versuch{

List<Wasser> listw;
List<Zement> listz;
List<Sand> lists;
}

class Wasser{
@XmlAttribute
String gewicht
}

class Sand{
@XmlAttribute
String gewicht
@XmlAttribute
String körnung
}

class Zement{
@XmlAttribute
String gewicht
@XmlAttribute
String farbe
String wert
}

ODER?

Gruß
Zirni
 
G

Gast

Gast
Hallo ralfz,

das allerliebste wäre eine automatische Generierung der java-Klassen mittels einem XML-Schema. Aber so geht es auch. Die Reihenfolge der Elemente WASSER, ZEMENT und SAND ist wichtig, vermutlich muss ich die Klasse VERSUCH ändern nach:

Code:
class Versuch{
Vector vecWZS;
}

um beliebige Objekte vom Typ WASSER, ZEMENT und SAND in einer vorgeschriebenen Reihenfolge abzuspeichern?!

Gruß,
uf
 

ralfz

Aktives Mitglied
Hi,

also um die Order der Elemente bei der Ausgabe festzulegen, gibt es eine Annotation:
@XmlType( propOrder={ ...}

Bei Versuch wäre das dann wohl:

Code:
@XmlType( propOrder="listw","listz","lists"})
class Versuch{

// jetzt noch nen paar bessere Namen
@XmlElement(name="WASSER")
List<Wasser> listw;
@XmlElement(name="ZEMENT")
List<Zement> listz;
@XmlElement(name="SAND")
List<Sand> lists;
}

Dann sollte das schon gehen...

Viel Erfolg

Falls du übrigens eine "Ebene" zu viel hast kannst du die Annotation "@XmlValue" nutzen.
Die habe ich gerade den halben Tag gesucht ;)

also um bei Zement aus:
Code:
class Zement{
@XmlAttribute
String gewicht
@XmlAttribute
String farbe
String wert
} 

// mit
 <ZEMENT gewicht="25g" farbe="weiß">
      <wert>W21</wert>
</ZEMENT>

// das hier zu machen:
 <ZEMENT gewicht="25g" farbe="weiß">W21</ZEMENT> 

// brauchst du:
 class Zement{
@XmlAttribute
String gewicht
@XmlAttribute
String farbe
@XmlValue  // <------
String wert
}

Gruß
Zirni
 

ralfz

Aktives Mitglied
Ohh,

jetzt hab ich gerade erst deine Aussage richtig erfasst....

Du musst die Zutaten nicht gruppiert erfassen, sondern genau so wie sie vorkommen...

Hmm, da hab ich doch eben noch was gelesen... wo war das bloss....

Ahh hier:

https://jaxb.dev.java.net/nonav/jaxb20-pfd/api/index.html

du brauchst "@XmlElementRef" für eine allgemeine Liste:

Schau mal bei Example1:

Code:
@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 {
         ...
     }

daraus sollte dann:

Code:
// mit:
Target target = new Target();
     target.tasks.add(new JarTask());
     target.tasks.add(new JavacTask());
     
     marshal(target);

//das hier werden:

<target>
       <jar>
         ....
       </jar>
       <javac>
         ....
       </javac>
</target>

Sollte so gehen, oder?

Gruß
Zirni
 

ralfz

Aktives Mitglied
Noch besser:

Das hier sollte gehen:

Code:
//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;
}

/* dazu hatte ich 
lose.add(paper);
lose.add(book);
lose.add(paper);
lose.add(paper);
lose.add(book);
*/

Und bekomme:

Code:
 <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>

:D

Gruß
Zirni
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R JAXB: Aus einem Vector oder List XML Datei erstellen XML & JSON 1
8u3631984 jaxb XML Mapper - Root Element mit Attribut XML & JSON 20
W jaxws jaxb wsdl Java-Klassen generieren und binding.xml verwenden XML & JSON 1
Rakshan Unmarshalling multiple namespaces with jaxb XML & JSON 0
B JAXB und HTML XML & JSON 1
E JAXB und java.nio.file.Path XML & JSON 4
W jaxb-api XML Feld nicht gesendet setzt das Defaultvalue nicht XML & JSON 3
S Muss ich bei JAXB immer noch eine zusaetzliche List-Wrapper Klasse erstellen wenn ich mehrere Objekte serialisieren will..? XML & JSON 1
S JAXB mit mehreren zusammenhängenden .xsd-Files XML & JSON 0
N JAXB: Überflüssiges Wrapper-Tag für Map-Einträge XML & JSON 0
D JAXB mit Map und Color XML & JSON 2
K JAXB-XML unvollständig XML & JSON 1
K JAXB Unmarshelling XML & JSON 1
E JAXB und abstrakte Klasse(n) XML & JSON 0
B JAXB - Unmarshal -> Kinder bekommen und die Kinder von den Kinder XML & JSON 7
B JAXB - Marshal ArrayList XML & JSON 2
B JAXB - java.util.Locale does not have a no-arg default constructor XML & JSON 2
B JAXB-Fehler bei REST-Api XML & JSON 0
M JAXB HashMap Dynamisches Laden XML & JSON 0
M JAXB @XMLID und @XMLIDREF, wie Daten hinzufügen XML & JSON 2
P JAXB-Problem XML & JSON 1
A JAXB: XMLMixed generieren XML & JSON 0
R [JAXB] XmlRootElement und XmlType gemeinsam nutzen XML & JSON 0
I XML to Object - Mapping mit JAXB 1.0 XML & JSON 1
L JAXB - Generischen Wert mit Liste belegen XML & JSON 1
M XML-Datei mit JAXB und 2 Namespaces XML & JSON 0
K JAXB Annotation @XMLRootElement vererben XML & JSON 0
F JAXB Unmarshal - Kein "default Constructor" XML & JSON 2
F.S.WhiTeY JAXB: Schema nicht "erben" XML & JSON 2
B JAXB - manuell Klassen aus xsd XML & JSON 3
S Jaxb Unmarshalling Problem XML & JSON 4
S JAXB - Any Elementliste - wie Werte verändern? XML & JSON 4
R JAXB: A cycle is detected in the object graph. This will cause infinitely deep XML XML & JSON 6
M JAXB versucht abstrakte Klasse zu erzeugen XML & JSON 7
M JAXB: automatisches Groß schreiben Property XML & JSON 9
C Projekt - JAXB, EMF oder doch DOM? XML & JSON 4
C JAXB: XML-Elemente einlesen und als XML-Attribute ausgeben XML & JSON 7
R sax, stax, jdom, jaxb? List von Objekten speichern und laden XML & JSON 6
J JAXB: Mehrmals abspeichern XML & JSON 3
D XML Einlesen mit JaxB XML & JSON 4
W JAXB Binding customization XML & JSON 4
L JAXB und Interfaces XML & JSON 4
S Problem with JAXB unmarshalling classes that have the same name in @XmlRootElement XML & JSON 2
eykarhorn JAXB namespace attribut aus rootelement entfernen XML & JSON 2
nrg JAXB - nor any of its super class is known to this context XML & JSON 3
S aus XML mit JAXB zu Baumstruktur XML & JSON 3
nrg JAXB generell auf XMLs übertragbar XML & JSON 22
Landei JAXB: Wert von übergeordneten Element XML & JSON 4
B PropertyChangeListener generieren mit JAXB (xjc) XML & JSON 3
G JAXB und verschachtelte Elemente? XML & JSON 6
G JAXB XML-Attribute feststellen XML & JSON 4
S JAXB 2 und JSR 303 XML & JSON 11
M [JAXB] @XmlAnyElement namespace XML & JSON 4
R JAXB Unmarshal XML & JSON 2
J JAXB und ArrayList XML & JSON 4
Landei Jpa2 -> jaxb??? XML & JSON 9
M JAXB - HashMap XML & JSON 1
dzim JAXB-Unmarshalling ignoriert/löscht Einträge aus XML - oder lässt sie verschwinden XML & JSON 3
S JAXB 2 und Java Annotationen/Interfaces generieren XML & JSON 3
ruutaiokwu jaxb eclipse plugin... XML & JSON 3
K JAXB: Klassen mit Annotation Lesen/Schreiben XML XML & JSON 3
R JAXB ausgewählte Felder XML & JSON 10
TiME-SPLiNTER JAXB: com.sun.xml.bind.v2.ContextFactory XML & JSON 3
V JAXB und leere Listen XML & JSON 2
L compareto(), equals() in JAXB generierten Dateien XML & JSON 3
D jaxb validierung/verification vor marshalling XML & JSON 3
J JAXB mit GregorianCalendar XML & JSON 4
HombreDelMundo JAXB can't handle interfaces XML & JSON 4
N Individuelles Wrapper-Element um Collection mit JAXB XML & JSON 6
B JAXB Unmarshalling mehrerer Objekte XML & JSON 2
V JAXB schema 2 java XML & JSON 3
B JPA + JAXB Mapping Problem XML & JSON 2
S Navigieren in unbekannten JAXB-Objecten XML & JSON 2
J JAXB NullPointerException im ContextFinder XML & JSON 6
H JAXB und STAX XML & JSON 2
H JAXB Probleme beim Unmarshalling XML & JSON 3
C Serialisierung mit JAXB XML & JSON 6
K JAXB und Maps -> Marshalling-Problem XML & JSON 6
S JAXB und viele verschachtelte Attribute XML & JSON 1
J JAXB - Map XML & JSON 2
O JAXB generierte Klassen sollen Serializable implementieren XML & JSON 1
aze JaxB: Nullelemente in Array nicht anzeigen XML & JSON 3
turmaline JAXB can't handle interfaces XML & JSON 20
sambalmueslie JAXB - Unmarshall ein XML-Document das aus zwei XSD Definitionen besteht XML & JSON 8
S JAXB und abstrakte Klasse(n) XML & JSON 4
P JAXB: Marshalling XML & JSON 7
aze JaxB Elemente in LinkedHashSet werden nicht wiededergegeben XML & JSON 3
M JAXB: Wie folgendes Konstrukt abbilden? XML & JSON 20
A Jaxb und Interfaces XML & JSON 12
B JaxB und XSD :-) XML & JSON 8
G JAXB - Marshaller - kein Rückgabewert XML & JSON 2
N XML will nicht weder JAXB noch XStream XML & JSON 8
F Zugriff auf durch JAXB erzeugte Object-Struktur... XML & JSON 6
C Java-Imports bei Jaxb XML & JSON 8
F Marshaling eines JAXB Objektes worin ein anderes JAXB Objekt eingeschlossen ist XML & JSON 6
K JAXB, Vererbung und Codegeneration XML & JSON 2
M XmlRootElement und JAXB XML & JSON 4
M Jaxb Annotationen, Wert als XML Element XML & JSON 2
J JCheckbox abfragen und serialisieren mit JAXB 2.0 XML & JSON 15
F JAXB erste schritte XML & JSON 6

Ähnliche Java Themen

Neue Themen


Oben