Probleme mit dem DomParser

    • Offizieller Beitrag

    haben einen XML-Stream, den ich über den DomParser parsen möchte.

    Code
    ' stream ... NotesStream'Set domParser = s.CreateDOMParser(Stream)Call domParser.Parse


    Der DomParser bringt den Fehler 4602 (lsERR_NOTES_DOMPARSER_FAILED).
    Schreibe ich den Stream vorher in eine Datei weg, dann macht der DomParser keine Probleme.

    Code
    ' stream ... NotesStream'stream.Position = 0 Set stream_test = s.CreateStreamflag = Stream_test.Open( Dateiname, "UTF-8")Stream_test.Truncatestream_test.WriteText(stream.ReadText)stream_test.CloseSet domParser = s.CreateDOMParser(Stream)Call domParser.Parse

    Im Debugger sehe ich, dass die Position unterschiedlich ist. Also habe ich die Position ans Ende des Streams verschoben.

    Code
    ' stream ... NotesStream'
    stream.Position = stream.Bytes
    Set domParser = s.CreateDOMParser(Stream)
    Call domParser.Parse

    Auch hier wird der Fehler 4602 ausgegeben.


    Bis auf die Position sehen die Streams in allen 3 Varianten identisch aus.


    Was mache ich falsch?


    Danke und Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

    • Offizieller Beitrag

    Sieht nicht so aus. Habe die Teile aus dem Debugger mal in den Ausgangspost angehangen.


    Gruß
    Dirk

    • Offizieller Beitrag

    aber der öffnende Stream ist doch Stream_test. Dies hat doch auf den Stream keine Auswirkung.


    Wie kann ich Charset eines offenen Streams verändern?


    Schaue ich mir die XML-Datei an, dann steht da im Header schon UTF-8.


    Gruß
    Dirk

  • Der Header vom XML hat ja nichts mit der Codierung des Streams zu tun.
    Das sollte übereinstimmen, muss es aber nicht.


    Wie gesagt vermute ich daß es da irgendwelchen internen Konvertierungen gibt.
    Sicher kann ich es aber auch nicht sagen

    • Offizieller Beitrag

    SCH...ade.


    Über eine Datei will/kann/darf ich nicht gehen, da ich gerade von der Dateilösung weg will wegen MAC-OS, WinXP, WinVista, Win7 etc. auf dem Client.


    Gibt es noch andere Ideen dies umzusetzen? - wenn ja welche!


    Gruß
    Dirk

    • Offizieller Beitrag

    mit db.GetDocumentByURL wird ein temporäres Dokument, welches nicht gespeichert wird, geholt.
    Dieses Dokument hat einen Dateianhang (XML-Datei). Diesen hole ich mir per DXL-Export und lese alles zwischen <filedata> und </filedata> aus - ohne Parser!.
    Den Inhalt decodiere ich von Base64 über die Klasse NotesMimeEntity.
    Ergebnis ist ein Stream, der nur noch den Inhalt der gewünschten XML-Datei enthält.
    Jetzt will ich den DomParser auf den Stream loslassen und es kommt der Fehler 4602.


    Base64Decodierung:


    Danke und Gruß
    Dirk

    • Offizieller Beitrag

    naja sobald ich den Stream direkt an den Parser übergebe taucht der Fehler auf.
    Nur wenn ich über einen 2. stream den ersten Stream auf die HDD schreibe kommt der Fehler beim Parsen des 1. Streams nicht mehr.


    Gruß
    Dirk

    • Offizieller Beitrag

    habe jetzt den stream mal in einen 2. temp. Stream geschreiben.

    Code
    Set stream_temp = s.CreateStream
    stream_temp.Truncate
    stream_temp.Position = 0
    stream_temp.WriteText(stream.ReadText)
    
    
    stream.Position = 0

    Danach verwende ich aber nur den strem, der temp. Stream wird nirgends mehr verwendet. Und dann läuft auch der Parser darüber.


    Der temp. Stream wird auch nicht auf die Platte geschrieben.


    Wieso dies so ist erschließt sich mir nicht!


    Gruß
    Dirk

    • Offizieller Beitrag

    ok werde ich jetzt so einsetzen.


    Danke und Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein