Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi XML aus einem binär Stream fischen (https://www.delphipraxis.net/196004-xml-aus-einem-binaer-stream-fischen.html)

KodeZwerg 13. Apr 2018 14:30

XML aus einem binär Stream fischen
 
Hallo, ich Doktor gerade an Binär-Dateien rum wo auch XML enthalten ist.
Ich finde den Anfang vom XML und das Ende, hab das ganze nun in einem Array of Bytes.
So weit so gut, nur hab ich jetzt sehr viele Fragezeichen im Kopf wie ich denn damit umzugehen habe.
Es soll nur gelesen werden, viel eher, es sollen mir alle Knoten und Werte irgendwie dargestellt werden.
Mir fällt nur ein das ich das Array in ein File schreibe um es anschliessend mit einer XML Unit verarbeite, aber das alles im Speicher auszuführen wäre mir da lieber.
Hat dazu jemand einen Rat?
Oder existiert eine XML Variante der ich ein Datei Offset + Länge mitteilen kann um an die Daten zu gelangen?

Zacherl 13. Apr 2018 14:37

AW: XML aus einem binär Stream fischen
 
Welches XML Framework verwendest du denn? Es gibt sicherlich Möglichkeiten das Dokument direkt aus einem Stream/dem Speicher zu parsen.

KodeZwerg 13. Apr 2018 14:56

AW: XML aus einem binär Stream fischen
 
Bis jetzt noch gar keins, also ich bin mehr als offen für alle Varianten.
Momentan suche ich im Stream nach
Delphi-Quellcode:
<?xml version="1.
um den Anfang zu ermitteln und wühle dann weiter.

hoika 13. Apr 2018 15:53

AW: XML aus einem binär Stream fischen
 
Hallo,

https://www.delphipraxis.net/127650-...xml-4-0-a.html

hier steht weiter unten was zu LoadFromStream.

Im Stream muss aber ein gültiges Xml-Dokument stehen, d.h. du erzeugst einen TStringStream
und schreibst dort Deine Xml-Datei rein.
Es müsste bei den Streams auch ein CopyFrom/CopyTo geben, vorher die ermittelte (Anfangs-) Stream.Position setzen und die Größe hast Du ja auch.

himitsu 13. Apr 2018 16:24

AW: XML aus einem binär Stream fischen
 
Grundsätzlich nehmen praktisch alle XML-Libs auch Streams entgegen, aber wie bereits gesagt wurde, muß in diesem Stream, ab der aktuellen Position (gibt nur seltne Ausnahlen, die immer vom Anfang ausgehn) bis zum Ende ein gültiges XML vorkommen.

Also mußt du mindstesten den gewünschten Teil in einen anderen Stream kopieren, aber da kannst du das oftmals auch gleich als TEXT auslesen und und in die XML-Komponente laden.

KodeZwerg 13. Apr 2018 17:02

AW: XML aus einem binär Stream fischen
 
Hey, vielen Dank und es läuft bereits.
Delphi-Quellcode:
memXML.LoadFromStream(memXMLStream);
hat's gebracht, Dankeschön!
Ich musst nur mein Array weglassen aber dafür ein Stream erzeugen mit gleichem Inhalt.
Nun gehts an's Eingemachte :)
Danke himitsu für den Tipp aber da ich völliger Neuling mit XML bin, bin ich froh wenn ich Definitionen und Werte auslesen kann, woran ich gerade werkel, wie ich TEXT auslese und direkt in die memXML bekomme da tun sich noch mehr Fragezeichen auf.

Ich verwende das
Delphi-Quellcode:
var memXML := Xml.XMLDoc.TXMLDocument;
Framework, ein anderes hab ich in Delphi nicht entdecken können.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz