# Wie Attribute aus XML in ein Model schreiben (StAX)?



## Guest (28. Feb 2007)

Hi Leute,

ich habe eine Model Klasse die einfach nur Werte halten soll (Model). Diese Werte sollen aus einer XML mit StAX gelesen werden und dann in die entsprechenden Variablen des Models kopiert werden.
Bisher habe ich eine Ausgabe aller XML-Elemente und Attribute, aber anstatt diese auszugeben möchte ich sie direkt in mein Model schreiben.

Fällt da jemanden eine saubere Lösung zu ein (ohne wilde if-then-else Konstruktue und mit möglichst wenig Schleifen)? 

Das habe ich bis jetzt:


```
public void load(InputStream anInputStream) throws Exception {

        XMLInputFactory theXMLInputFactory = XMLInputFactory.newInstance();
        XMLEventReader theParser = theXMLInputFactory.createXMLEventReader(anInputStream);

        while(theParser.hasNext())
        {
            XMLEvent theEvent = theParser.nextEvent();
            switch (theEvent.getEventType())
            {
                case XMLStreamConstants.START_ELEMENT:
                    StartElement theElement = theEvent.asStartElement();
                    System.out.println("START: " + theElement.getName());
                    for(Iterator theAttributes = theElement.getAttributes(); theAttributes.hasNext();)
                    {
                        Attribute theAttribute = (Attribute)theAttributes.next();
                        System.out.println("  Attribut: " + theAttribute.getName()
                                + "\n   Wert: " + theAttribute.getValue());
                    }
                    break;
                case XMLStreamConstants.END_ELEMENT:
                          System.out.println("ENDE: " + theEvent.asEndElement().getName());
                    break;
                default:
                    break;
            }
        }
        theParser.close();
    }
```

Danke schonmal im Voraus! 

Gruß Nova


----------



## kama (28. Feb 2007)

Hallo,

anstatt das Ganze selbst zu machen, wie wäre es mit XStream. Unheimlich einfach. 

EDIT: Unbedingt das Kurze Tutorial anschauen.

MfG
Karl Heinz Marbaise


----------



## Guest (28. Feb 2007)

Hm, XStream macht irgendwie nicht so einen guten Eindruck. Aber dein Ansatz ist gut ;-) Gibt es vielleicht noch andere Alternativen zu XStream? Mir kommt es beim XML-Parsing hauptsächlich auf die Performance an.

Danke schonmal! 

Gruß Nova


----------



## kama (28. Feb 2007)

Anonymous hat gesagt.:
			
		

> Hm, XStream macht irgendwie nicht so einen guten Eindruck.


Warum nicht? Wo genau ist Dein Problem?



			
				Anonymous hat gesagt.:
			
		

> Aber dein Ansatz ist gut ;-) Gibt es vielleicht noch andere Alternativen zu XStream? Mir kommt es beim XML-Parsing hauptsächlich auf die Performance an.


Wie groß sind denn die Dateien, die Du parsen musst ? 1-2 GB ?

MfG
Karl Heinz Marbaise


----------



## Guest (1. Mrz 2007)

Ne, so groß nicht, aber mit DOM hab ich auch schon mit kleinen XMLs Probleme gehabt.
Bei XStream ist mir zu viel Reflection drin und das ist auch irgendwie ziemlich unbekannt, da gibts doch sicher eine professionellere Lösung oder? 

Gruß Nova


----------



## kama (2. Mrz 2007)

Hallo,



			
				Anonymous hat gesagt.:
			
		

> Ne, so groß nicht,


Wo ist dann das Problem?



			
				Anonymous hat gesagt.:
			
		

> aber mit DOM hab ich auch schon mit kleinen XMLs Probleme gehabt.


Tja dann ist XStream genau die Lösung.



			
				Anonymous hat gesagt.:
			
		

> Bei XStream ist mir zu viel Reflection drin


Ähm. was ist dagegen einzuwenden? Viele andere Frameworks nutzen auch Reflection ? Hinberate etc.



			
				Anonymous hat gesagt.:
			
		

> und das ist auch irgendwie ziemlich unbekannt,


Hm...Kratz am Kopf....Es wurde bereits schon in verschiedenen Projekte eingesetzt an denen ich mit gearbeitet habe und es wurde nicht von mir vorgeschlagen. Also ist das relativ...Ich kenn sehr viele leute die XStream kennen und nutzen...wenn ich die Leute die ich kenne und die Projekte rechne und deren Aussagen nehme, komme ich auf ca. 100 Projekte bei denen XStream eingesetzt wird...




			
				Anonymous hat gesagt.:
			
		

> da gibts doch sicher eine professionellere Lösung oder?


Was hat professionell mit Bekanntheit zu tun? Apropos, wie definierst Du professionell ?

Selbstverständlich kannst Du es auch ein wenig komplizierter haben, dann kannst Du auch XMLBeans, nehmen...

Wenn das Deinen Professionalitätsanspruch genügt ?

MfG
Karl Heinz Marbaise


----------



## Guest (3. Mrz 2007)

Hi,

also ich hab mich jetzt für JAXB entschieden, ist simpel umgesetzt, performant durch die Anwendung von StAX, benötigt keine Konfiguration durch Strings und wird direkt mit Java 1.6 ausgeliefert (keine externen Module notwendig).

Und es funktioniert! ;-)

Allerdings habe ich jetzt noch ein paar unschöne Sachen.
Meine Ergebnis-XML sieht so aus:


```
<?xml version="1.0"?><test><discription>Test-Description</discription><input xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">Test</input></testDefinitionModel>
```

Alles wird in eine Zeile geschrieben und jedesmal wenn eine Collection gespeichert wird, wird in das entsprechende Tag "xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string"" mit hineingeschrieben.
Lässt sich das irgendwie unterbinden?

Danke schonmal im Voraus! 

Gruß Nova


----------



## Guest (3. Mrz 2007)

Ah, ich habs hinbekommen. Geht mit @XmlElement(namespace = "").

Danke! 

Gruß Nova


----------

