PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Java] Einzelne Elemente aus XML per JAXB auslesen


Baalzamon
2010-06-20, 19:53:00
Hallo,

ich möchte gerne meine XML-Laderoutine verallgemeinern. Dazu wäre es mir sehr genehm wenn ich mit JAXB einfach aus einem übergeordneten XML-File nur eine bestimmte Sequenz von Elementen ziehen könnte (die in jeder XML-Datei vorhanden ist) ohne das ich die darüberliegende XML-Struktur kennen muss.

Sagen wir mal ich hätte ein generisches Attribut-Tupel

<element name="GenericAttribute" type="des:GenericAttribute"></element>

<complexType name="GenericAttribute">
<attribute name="value" type="string"></attribute>
<attribute name="name" type="string"></attribute>
</complexType>

und zwei XML-Typen die diese benutzen

<include schemaLocation="Exchange.xsd"></include>
<include schemaLocation="GenericAttribute.xsd"></include>

<element name="ElementA">
<complexType>
<sequence>
<sequence>
<element name="attribute" type="des:GenericAttribute" maxOccurs="unbounded" minOccurs="0"></element>
</sequence>
<element name="incoming" type="des:Exchange" maxOccurs="1" minOccurs="0"></element>
</sequence>
</complexType>
</element>

und

<include schemaLocation="Exchange.xsd"></include>
<include schemaLocation="GenericAttribute.xsd"></include>

<element name="ElementB">
<complexType>
<sequence>
<sequence>
<element name="attribute" type="des:GenericAttribute" maxOccurs="unbounded" minOccurs="0"></element>
</sequence>
<element name="outgoing" type="des:Exchange" maxOccurs="1" minOccurs="0"></element>
</sequence>
</complexType>
</element>


Ich habe per XJC die entsprechenden Klassen erstellen lassen (GenericAttribute, ElementA und ElementB) und Objekte ElementA und ElemntB kann ich auch schön einzeln per Unmarshaller erstellen und dann auf die Attribute zugreifen.

Nun würde ich aber gerne zB nur die Attribute auslesen, ohne das ich weiss, ob es sich dabei um Klasse A oder B handelt.

Ist das möglich und wenn ja wie?

Gast
2010-06-21, 23:55:13
Du könntest dir mal "Commons Configuration" und "Commons Digester" von der Apache Foundation ansehen.

Baalzamon
2010-06-25, 13:29:07
Du könntest dir mal "Commons Configuration" und "Commons Digester" von der Apache Foundation ansehen.
Hmmm.... habe ich gemacht, aber die machen das ja auch nicht per JAXB (soweit ich das gesehen habe) sondern über ihre eigenen Methoden.

Ich habe es jetzt erstmal so gelöst, das ich die entsprechenden Elemente per DOM auslese und dann in die JAXB-Klassen packe. Geht auch, ist halt nicht ganz so schön, funktioniert aber soweit ganz gut.

Mir ging es prinzipiell auch erstmal darum dieses Prozedere vor dem Benutzer zu verstecken und das ist mir damit gelungen. Die Unterklassen müssen sich jetzt nicht mehr darum kümmern die 'Standardfelder' auszulesen.

Frei nach dem Motto: Do what it takes. ;)