Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Große XML Datensätze auswerten (https://www.delphipraxis.net/202342-grosse-xml-datensaetze-auswerten.html)

Peter666 23. Okt 2019 11:51

Große XML Datensätze auswerten
 
Hi,

ich bin mir nicht sicher ob es hier in den Thread passt, aber ich mal eine Frage bezüglich großen XML Datensätzen. Für ein Projekt muss ich mit Lazarus größere XML Dateien auswerten. Mit größer meine ich Monster die bis zu 120GB umfassen. Jetzt bitte nicht verwundert die Augen reiben, das habe ich schon getan :) Gibt es so etwas wie XMLReader für C# auch in Delphi/Lazarus bei der die XMLs ohne Zwischenspeicher nur vorwärts gelesen werden? Die XMLs haben übrigens alle keine Linebreaks.

Peter

taveuni 23. Okt 2019 12:07

AW: Große XML Datensätze auswerten
 
Zum Beispiel dieser SAX Parser hier. Nutze ich auch.

Peter666 23. Okt 2019 12:38

AW: Große XML Datensätze auswerten
 
Cool,

Danke, aber der scheint die Datei in den RAM zu lesen. Das ist bei den Größen die ich hier habe nicht realisierbar.

taveuni 23. Okt 2019 12:51

AW: Große XML Datensätze auswerten
 
Ups. habe erst jetzt gelesen 120 GB. Mein Gott.

Diesen hier hatte ich auch mal auf dem Radar.

Da steht unter anderem:

Code:
TXMLSeqParser (OXmlSeq.pas): Sequential DOM parser based on OXmlPDOM.pas.
Read huge XML files into the DOM sequentionally. This method combines DOM capabilities without the need to load the whole document at once.
OXmlSeq is even a little bit faster than OXmlPDOM.

jobo 23. Okt 2019 13:04

AW: Große XML Datensätze auswerten
 
Ich weiß es ist nicht, wonach Du gefragt hast, aber statt zu fragen, ob das auch helfen könnte, gleich der Vorschlag:
xml-twig-tools
Hilft dabei, große (XML) Dateien zu zerlegen (fachgerecht).

Unter Linux über Paketmanager installierbar, unter Windows vielleicht mit cygwin. Der Code ist glaub ich frei verfügbar, python wenn ich mich richtig erinnere.

peterbelow 23. Okt 2019 13:13

AW: Große XML Datensätze auswerten
 
Zitat:

Zitat von Peter666 (Beitrag 1450130)
Hi,

ich bin mir nicht sicher ob es hier in den Thread passt, aber ich mal eine Frage bezüglich großen XML Datensätzen. Für ein Projekt muss ich mit Lazarus größere XML Dateien auswerten. Mit größer meine ich Monster die bis zu 120GB umfassen. Jetzt bitte nicht verwundert die Augen reiben, das habe ich schon getan :) Gibt es so etwas wie XMLReader für C# auch in Delphi/Lazarus bei der die XMLs ohne Zwischenspeicher nur vorwärts gelesen werden? Die XMLs haben übrigens alle keine Linebreaks.

Peter

Sieh mal hier: https://mikejustin.wordpress.com/201...d-free-pascal/

SAX for Delphi habe selbst vor einigen Jahren mal verwendet, hat gut funktioniert.

Peter666 23. Okt 2019 13:14

AW: Große XML Datensätze auswerten
 
Danke, ich kann die aber nicht zerlegen. Zugriff darauf habe ich nur readonly. In C# gibt es den XMLReader der quasi den Stream liest und dir Element für Element ausgibt und man sich so durchhangelt.

taveuni 23. Okt 2019 13:27

AW: Große XML Datensätze auswerten
 
Zitat:

Zitat von Peter666 (Beitrag 1450142)
Danke, ich kann die aber nicht zerlegen. Zugriff darauf habe ich nur readonly. In C# gibt es den XMLReader der quasi den Stream liest und dir Element für Element ausgibt und man sich so durchhangelt.

Eben das scheint Oxml auch zu können. Ist allerdings nicht gratis.

Peter666 23. Okt 2019 13:44

AW: Große XML Datensätze auswerten
 
Stimmt, ich hab das auch gerade gesehen. https://github.com/FMXExpress/Trolle...rce/OXML/units

Zum Testen reicht die Beta, den Rest muss El Jefe entscheiden.

Danke.

Sinspin 24. Okt 2019 09:05

AW: Große XML Datensätze auswerten
 
Hallo, ich habe auch schon ähnlich große Dateien zerlegt. EBAY Categories. Ist schon Jahre her.
Damals habe ich auch mit verschiedenen Techniken gespielt. SAX war die Lösung. Ich habe dann NSoftware XMLp Parser verwendet. Der ließt direkt aus der Datei und erzeugt Events für die gefundenen Elemente wärend des drüber lesens.

Union 24. Okt 2019 09:50

AW: Große XML Datensätze auswerten
 
Indiziere doch vorher das XML nach Start/EndTags. Dann liest Du es später blockweise und verarbeitest es.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:18 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