# mehrere Parameter in XML (stax)



## ph1015 (20. Sep 2010)

Hallo,

ich habe mich seit kurzem in das Thema "StaX" eingearbeitet (Anfänger).

Ich habe eine XML Datei, die wie folgt aussieht:
[XML]<start version="1.0.0">
    <Named>
        <Name>name1</Name>
        <User>
            <Name>name2</Name>
            <Title>Title2</Title>
             <Type>
                <Name>Name3</Name>
                <Title>TypeTitle</Title>
                 [...]
             </Type>
        </User>
    </Named>
</start>[/XML]

Ich möchte nun die XML Datei Parsen und die Werte (je nach dem) entsprechend ändern. Ich kann zwar die XML Datei mit StaX auslesen, aber nicht die doppelten Einträge <Name>. Der erste Wert wird von dem letzten überschrieben. Java-Code sieht wie folgt aus:

```
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
InputStream in = new FileInputStream(file);
XMLEventReader eventReader = inputFactory.createXMLEventReader(in);
Item item = null;

while (eventReader.hasNext()) {
                XMLEvent event = eventReader.nextEvent();
                if (event.isStartElement()) {
                    StartElement startElement = event.asStartElement();

                    if (startElement.getName().getLocalPart().equalsIgnoreCase(Named)) {
                        item = new Item();
                    }

                    if (item != null) {
                        if (event.asStartElement().getName().getLocalPart().equalsIgnoreCase(NAME)) {
                            event = eventReader.nextEvent();
                            item.setName(event.asCharacters().getData());
                            continue;
                        }

                        if (event.asStartElement().getName().getLocalPart().equalsIgnoreCase(TITLE)) {
                            event = eventReader.nextEvent();
                            item.setTitle(event.asCharacters().getData());
                            continue;
                        }
                    }
                }

                if (event.isEndElement()) {
                    EndElement endElement = event.asEndElement();
                    if (endElement.getName().getLocalPart().equalsIgnoreCase(Named)) {
                        items.add(item);
                    }
                }
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (XMLStreamException e) {
            e.printStackTrace();
        }

        return items;
```

Kann mir einer einen Tipp geben, wie ich es am besten Parsen kann? Vielleicht doch nicht mit StaX?

Viele Grüße
Andy


----------



## Noctarius (20. Sep 2010)

Du musst die Parent-Hierarchie beachten. Du musst also quasi nachsehen was das Parent-Tag ist.


----------



## ph1015 (20. Sep 2010)

erstmal danke für die schnelle Antwort.

gibt es hierfür bereits eine Methode oder soll ich mir die Parent-Hierarchie in ein Array o.ä. zwischen speichern?


----------



## Noctarius (20. Sep 2010)

In StaX wüsste ich spontan keine, hab mit StaX aber auch nicht soviel Erfahrung.


----------

