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

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

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

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

Code:
<?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
 
Ah, ich habs hinbekommen. Geht mit @XmlElement(namespace = "").

Danke! 🙂

Gruß Nova
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben