Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Exception bei der Verarbeitung mit StAX

Empfohlene Antworten

Veröffentlicht

Hallo,

bei der XML Verarbeitung mit Java blicke ich noch nicht komplett durch. Die Erklärungen, die man so findet im Internet sind auch nicht gerade die besten, da fehlt mir die Hauptsache. Ich hoffe, Ihr könnt mir helfen.

Also ich habe einen XML String, der wie folgt aussieht (ohne Zeilenumbrüche):


<?xml version='1.0' encoding='UTF-8'?>

<database>

<dataset>

<data name='name'>wert</data>

.

.

.

</dataset>

<dataset>

<data name='name'>wert</data>

.

.

.

</dataset>

</database>

Mein Java Code zum Abfragen der einzelnen Werte sieht so aus:

XMLInputFactory factory = XMLInputFactory.newInstance();


Reader xmlreader = new StringReader(zeile);

try

{

	XMLStreamReader xmlStreamReader = factory

			.createXMLStreamReader(xmlreader);

	while (xmlStreamReader.hasNext())

	{

		xmlStreamReader.next();

		if (xmlStreamReader.getEventType() == XMLStreamReader.START_ELEMENT

				&& xmlStreamReader.getLocalName().equalsIgnoreCase("data"))

		{

//								System.out.println(xmlStreamReader

//										.getLocalName());

			String name = xmlStreamReader.getAttributeValue(null, "name");

			String value = xmlStreamReader.getText();

			map.put(name, value);

		}


		else if (xmlStreamReader.getEventType() == XMLStreamReader.START_ELEMENT

				&& xmlStreamReader.getLocalName().equalsIgnoreCase("dataset"))

		{

			saetze.add(map);

			map = new HashMap();

		}

	}

} catch (XMLStreamException e)

{

	e.printStackTrace();

}

Dabei bekomme ich beim Durchlaufen folgende Exception:

java.lang.IllegalStateException: Current state START_ELEMENT is not among the statesCHARACTERS, COMMENT, CDATA, SPACE, ENTITY_REFERENCE, DTD valid for getText() 

	at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.getText(XMLStreamReaderImpl.java:1067)

In der Zeile bei map.put(name, value);

Ich weiß aber leider nicht warum, und wie ich das ändern könnte. Die Verarbeitungsweise habe ich aus dem Java ist auch eine Insel Tutorial (Listing 18.15).

MFG derwunner

  • Autor

Dankeschön! Mit .getElementText() geht es nun.

Ein kleiner Fehler war noch drin: Es ist sinnvoll die HashMap mit null zu initialisieren und die HashMap der ArrayList nur anzuhängen, wenn ungleich null. Sonst würde die erste HashMap in der ArrayList keine Werte enthalten.

Thema geklärt

MFG derwunner

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.