Hallo zusammen,
bei einer Parsing-Aufgabe mittels StaX-Parser habe ich Erkenntnisse festgestellt.
Angenommen, ich habe EINE Datei, deren Inhalt n Stück well-formed-XML-Dokumente(ein well-formed-XML-Dokument pro Zeile) ist:
Ich wollte gerne diese XML-Dokumente mit StaX-Parser parsen. Nach der 1. Zeile geht der Cursor zwar auf die 2. Zeile, erkennt aber die XML-Deklaration nicht als gültiges Event. Eine Exception wird ausgegeben: nicht zulässig...
Da ich die XML-Dokumente nich zeilenweise einlesen und einzeln parsen, war ich auf der Suche nach einem "besseren" StaX-Parser als der Paser aus javax.xml.stream.*
Und tatsächlich: die StaX-Implementierung javolution.xml.stream.* verhält sich ein wenig anders als der "normale". Nach 1. Zeile erkennt Javolution nämlich alle Events in den darauffolgenden Zeilen. Keine Exception.
Jetzt kommts:
Bekanntlich kann man ein StaXSource-Objekt erzeugen und dieses als Parameter für die Methode Transformer.transform(Source xmlSource, Result outputTarget) übergeben. Deshalb ist so etwas möglich:
Hier ist streamReader vom Typ XMLStreamReader von javax.xml.stream.*
Allerdings nur für den normalen StaX-Parser, nicht aber für den StaX-Parser von Javolution. Diese StaX-Implementierung kann noch nicht mal ein Source-Objekt aus XMLStreamReader erzeugen. Es ist also nur logisch, dass Transformer lediglich für "Standards"parser ist. In der Doku steht:
Interface Source
All Known Implementing Classes:
DOMSource, JAXBSource, SAXSource, StAXSource, StreamSource
Und dann habe ich gedacht, vielleicht kann ich ja diese Defizite als Thema für eine Doktorarbeit bzw. Promotion vorschlagen. Ein Traum wäre natürlich, den javolution-StaX-Parser mit fehlenden Funktionen zu ergänzen.
Wie schätzt Ihr es? Ist es überhaupt realistisch? Wie "schwer" wäre so eine Arbeit?
Vielen Dank für die Kommentare.
Viele Grüße aus Rheinland,
Eure Ratna
bei einer Parsing-Aufgabe mittels StaX-Parser habe ich Erkenntnisse festgestellt.
Angenommen, ich habe EINE Datei, deren Inhalt n Stück well-formed-XML-Dokumente(ein well-formed-XML-Dokument pro Zeile) ist:
Code:
<?xml version="1.0" encoding="UTF-8"?><firstTag><nextTag>1</nextTag></firstTag>
<?xml version="1.0" encoding="UTF-8"?><firstTag><nextTag>2</nextTag></firstTag>
Ich wollte gerne diese XML-Dokumente mit StaX-Parser parsen. Nach der 1. Zeile geht der Cursor zwar auf die 2. Zeile, erkennt aber die XML-Deklaration nicht als gültiges Event. Eine Exception wird ausgegeben: nicht zulässig...
Da ich die XML-Dokumente nich zeilenweise einlesen und einzeln parsen, war ich auf der Suche nach einem "besseren" StaX-Parser als der Paser aus javax.xml.stream.*
Und tatsächlich: die StaX-Implementierung javolution.xml.stream.* verhält sich ein wenig anders als der "normale". Nach 1. Zeile erkennt Javolution nämlich alle Events in den darauffolgenden Zeilen. Keine Exception.
Jetzt kommts:
Bekanntlich kann man ein StaXSource-Objekt erzeugen und dieses als Parameter für die Methode Transformer.transform(Source xmlSource, Result outputTarget) übergeben. Deshalb ist so etwas möglich:
Code:
Transformer transformer = ... ;
transformer.transform(new StAXSource(streamReader), new StreamResult(writer));
Hier ist streamReader vom Typ XMLStreamReader von javax.xml.stream.*
Allerdings nur für den normalen StaX-Parser, nicht aber für den StaX-Parser von Javolution. Diese StaX-Implementierung kann noch nicht mal ein Source-Objekt aus XMLStreamReader erzeugen. Es ist also nur logisch, dass Transformer lediglich für "Standards"parser ist. In der Doku steht:
Interface Source
All Known Implementing Classes:
DOMSource, JAXBSource, SAXSource, StAXSource, StreamSource
Und dann habe ich gedacht, vielleicht kann ich ja diese Defizite als Thema für eine Doktorarbeit bzw. Promotion vorschlagen. Ein Traum wäre natürlich, den javolution-StaX-Parser mit fehlenden Funktionen zu ergänzen.
Wie schätzt Ihr es? Ist es überhaupt realistisch? Wie "schwer" wäre so eine Arbeit?
Vielen Dank für die Kommentare.
Viele Grüße aus Rheinland,
Eure Ratna