Fehler bei QXmlStreamReader::readNext() ignorieren



  • Hallo zusammen,

    beim parsen einer XML-Datei mit QXmlStreamReader liefert readNext() den Fehler "Es wurde Inhalt mit einer ungültigen Kodierung gefunden.".

    Der Wert in dem Feld ist auch tatsächlich Schrott, ich möchte das in dem Fall aber einfach ignorieren.

    Die Doku meint:

    TokenType QXmlStreamReader::readNext()
    Reads the next token and returns its type.
    With one exception, once an error() is reported by readNext(), further reading of the XML stream is not possible. Then atEnd() returns true, hasError() returns true, and this function returns QXmlStreamReader::Invalid.
    The exception is when error() returns PrematureEndOfDocumentError. This error is reported when the end of an otherwise well-formed chunk of XML is reached, but the chunk doesn't represent a complete XML document. In that case, parsing can be resumed by calling addData() to add the next chunk of XML, when the stream is being read from a QByteArray, or by waiting for more data to arrive when the stream is being read from a device().
    See also tokenType() and tokenString().

    Genauso ist auch das Verhalten, ich kann nicht weiterlesen. Hat jemand eine Idee wie ich den Fehler ignorieren und weiterlesen kann?

    Vielen Dank!



  • Da steht doch, dass parsing mit addData() fortgeführt werden kann. Oder verstehe ich dass falsch.



  • Ja, aber das hat mich auch nicht weitergebracht. Habe mir die halbe Nacht um die Ohren gehauen und verwende jetzt QDomDocument. Damit habe ich zwar größeren Overhead, aber es funktioniert problemlos. Scheinbar hat QXmlStreamReader Probleme mit großen Dateien?! 🙄



  • Das ist irgendwie unlogisch, denn DOM-Parser verbrauchen ja intern viel mehr Speicher als Stream-Parser, da sie die ganze XML-Datei einlesen und im Speicher halten.


  • Mod

    Schlangenmensch schrieb:

    Da steht doch, dass parsing mit addData() fortgeführt werden kann. Oder verstehe ich dass falsch.

    Was aber nur für PrematureEndOfDocumentError gilt.
    Evtl. das Dokument vorher nach UTF8 oder so konvertieren, evtl. behebt dies das Problem.


Anmelden zum Antworten