Streams, XML und die Probleme dazwischen

26. September 2006 19:21

Ich habe fast täglich mit XML-Dateien, Streams und allen Dingen dazwischen zu kämpfen. Ich habe ein Bild auf der Platte. Wie bekomme ich es sauber in die Datenbank? IMPORT, ganz klar! Und von dort wieder raus? EXPORT, keine Frage! Raus in ein XML Dokument? Hmm..., aus einem XML? Hmm...

XMLport, Automation, Files, Streams, BLOBs, alles schön. Aber irgendwie fehlen an jeder Ecke plötzlich Schnittstellen wo man sie braucht.

Ich bin es wirklich Leid :evil:

Deshalb habe ich angefangen, eine Automation Funktionsbibliothek zu schreiben, die mir all diese lästigen Probleme abnimmt. Meine Frage an dieser Stelle: Wem fällt noch etwas wichtiges ein, was unbedingt mit rein muss? Derzeit habe ich folgende Methoden:

Code:

StreamHandler.LoadFromStream(VARIANT navStream)
StreamHandler.SaveToStream(VARIANT navStream)
[BOOL Base64Encode :=] StreamHandler.Base64Encode()
[BOOL Base64Decode :=] StreamHandler.Base64Decode()
[BOOL LoadFromXmlNode :=] StreamHandler.LoadFromXmlNode(VAR IXMLDOMDOCUMENT2 xmlDoc, BSTR xmlPath)
[BOOL SaveToXmlNode :=] StreamHandler.SaveToXmlNode(VAR IXMLDOMDOCUMENT2 xmlDoc, BSTR xmlPath)



Wem das zu verrückt aussieht: Ich hab eben schnell mal folgendes getestet:

Code:

CREATE(StreamHandler);

f.OPEN('C:\TestImage.jpg');
f.CREATEINSTREAM(ins);

StreamHandler.LoadFromStream(ins);
StreamHandler.Base64Encode();

CREATE(XMLDocument);

XMLDocument.loadXML('<image><name>testimage.jpg</name><width>xx</width><height>yy</height><data /></image>');
StreamHandler.SaveToXmlNode(XMLDocument, '/image/data');
XMLDocument.save('C:\TestImageFromCAL.xml');

CLEAR(XMLDocument);

f.CLOSE();

CLEAR(StreamHandler);


CREATE(StreamHandler);
CREATE(XMLDocument);

XMLDocument.load('C:\TestImageFromCAL.xml');
StreamHandler.LoadFromXmlNode(XMLDocument, '/image/data');
StreamHandler.Base64Decode();

f.CREATE('C:\TestImageFromCAL.jpg');
f.CREATEOUTSTREAM(outs);
StreamHandler.SaveToStream(outs);

f.CLOSE();

CLEAR(XMLDocument);
CLEAR(StreamHandler);


Kurzform:
Bild laden, Base64 kodieren, On-the-fly XML bauen, Base64 Daten einfügen, XML speichern.
Gespeichertes XML laden, Bilddaten extrahieren, Base64 dekodieren, Bild speichern.

Euch fallen sicherlich noch andere Anwendungsgebiete ein die ggf. weitere Funktionen benötigen. Deshalb dieser Post. Ich freue mich auf eure Vorschläge.

15. November 2006 09:50

Wie genau löst du das mit der Base64 - Codierung? Benutzt du dafür die BitTalk Automationschnittstelle oder hast du dir eine eigene gebastelt?

15. November 2006 20:35

Das encoding wird innerhalb der Komponente durch Aufruf der entsprechenden .NET Framework Methode durchgeführt.