AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi XML aus einem binär Stream fischen
Thema durchsuchen
Ansicht
Themen-Optionen

XML aus einem binär Stream fischen

Ein Thema von KodeZwerg · begonnen am 13. Apr 2018 · letzter Beitrag vom 13. Apr 2018
Antwort Antwort
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

XML aus einem binär Stream fischen

  Alt 13. Apr 2018, 15:30
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?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: XML aus einem binär Stream fischen

  Alt 13. Apr 2018, 15:37
Welches XML Framework verwendest du denn? Es gibt sicherlich Möglichkeiten das Dokument direkt aus einem Stream/dem Speicher zu parsen.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: XML aus einem binär Stream fischen

  Alt 13. Apr 2018, 15:56
Bis jetzt noch gar keins, also ich bin mehr als offen für alle Varianten.
Momentan suche ich im Stream nach <?xml version="1. um den Anfang zu ermitteln und wühle dann weiter.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: XML aus einem binär Stream fischen

  Alt 13. Apr 2018, 16:53
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.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#5

AW: XML aus einem binär Stream fischen

  Alt 13. Apr 2018, 17:24
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: XML aus einem binär Stream fischen

  Alt 13. Apr 2018, 18:02
Hey, vielen Dank und es läuft bereits. 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 var memXML := Xml.XMLDoc.TXMLDocument; Framework, ein anderes hab ich in Delphi nicht entdecken können.
Gruß vom KodeZwerg

Geändert von KodeZwerg (13. Apr 2018 um 18:23 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:24 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