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.

XML ähnliche Datenstruktur mit SAX parsen

Empfohlene Antworten

Veröffentlicht

Ich möchte Daten auslesen, die in einer XML-ähnlichen Struktur aufgebaut sind. Der einzige Unterschied liegt darin, dass sie kein Rootelement besitzen und daher mehrere Elemente parallel auf der Roothirarchie liegen können. Der Einfachheit halber benutze ich dazu einen SAX Parser.

Das erste Element dieser Hirarchie und dessen Kinder werden korrekt ausgelesen, doch sobald ein nächstes folgt, steigt der Parser mit folgender Meldung aus:

org.xml.sax.SAXParseException: The markup in the document following the root element must be well-formed.

Natürlich könnte ich jetzt einen Workaround erstellen, allerdings wollte ich mich zuerst erkundigen, ob man diese Validierung nicht auch abschalten kann. Meine Suchen im Internet haben bisher leider nichts ergeben.

Die Meldung ist eindeutig. Das hast du ja bereits erkannt. :)

Dass du kein root-Element hast, ist nicht wirklich XML-konform.

Auf die Schnelle fällt mir kein XML-Parser ein, der das kann, was du möchtest.

Auch ein Beispiel, wieso man soetwas machen wollte, fällt mir nicht ein.

Was spricht also dagegen, um alle ersten Elemente herum ein root-Element zu legen? Dann wäre dein XML-Dokument "well-formed" und du hättest mit dem Parser keine Schwierigkeiten.

Wer oder was auch immer das XML-Dokument schreibt, welches du auslesen möchtest. Ich denke, er/sie/es sollte lernen, dass XML auch Regeln hat.

Wenn du darauf keinen Einfluss hast, kann ich an dieser Stelle keine weitere Hilfe anbieten. :-/

Grüße.

Arvid. =)

Dass die Daten kein Rootelement besitzen, liegt daran, dass ein Element als Root genommen wurde, bei dem erst später bemerkt wurde, dass es auch mehrfach vorkommen kann, unter gewissen eigenwilligen Bedingungen. und da unsere Kunden alle dieses Format benutzen und wir deswegen nicht verlangen können, dass alle ihre Systeme umstellen, muss es eben so gehn.

Gegen ein neues Rootelement spricht im ersten Fall der größere Ressourcenverbrauch für die zusätzlichen Arbeitsschritte bei mehreren tausend Dateien. Darum wollte ich erst wissen, ob es eine schöne Lösung dafür gibt, dem Parser das validieren auszutreiben.^^

Aber wenn da nichts zu machen ist, komm ich wohl nicht drum rum. Jedenfalls danke ich dir. :>

Ich hätte da eine zimlich simple Idee wie man das Umgehen könnte:

Ich schätze du benutzt irgendeinen InputStream oder sonstwas zum lesen das Daten. Schreib dir einfach ne eigene Klasse, die die entsprechende Methode zum lesen überschreibt.

In deiner Klasse lieferst du dann vor beginn der Daten einfach ein <root> und vor dem EOF noch ein </root>.

Dann dürfte sich der Parser beruhigen und ressourcenmäßig ist das vermutlich auch nicht unbedingt aufwendig.

Habs nun über zusätzliche Dateien gelöst, musste schnell fertig werden.

Das mit dem InputStream ist sicher auch ne nette Lösung, allerdings müsste ich da vorher noch die XML Deklaration rausfiltern und ich weiß gerade nicht, wie sich die verschiedenen read-Methoden verhalten. Jedenfalls werd ichs privat mal austesten und schauen, ob sich da was machen lässt.

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.