XML Datei-Struktur in eine MySQL Datenbank einpflegen

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
hubblec4
Beiträge: 341
Registriert: Sa 25. Jan 2014, 17:50

XML Datei-Struktur in eine MySQL Datenbank einpflegen

Beitrag von hubblec4 »

Halo Lazarus Gemeinde

Ich habe diesmal ein paar Fragen zu besagtem Thema. Da man im Netz wirklich viel dazu findet
ABER NICHT das was man braucht, möchte ich hier mal nachfragen.

XML Dateien werden sehr oft in ihrer Datenstruktur zerpflügt und nur die Daten der XML-Nodes kommen dann in eine MySQL Tabelle....
DIES möchte ich NICHT tun. Ich brauche das komplette XML, so wie es ist, als Datensatz.

Die XML Dateien sind Matroska Chapters oder Matroska Tags welche eine viel zu verschachtelte Struktur haben, so dass es keinen sinn macht jede menge Spalten anzulegen um dort die XML-Node-werte zu speichern.

Ich verwende die units Laz2_DOM, laz2_XMLRead, laz2_XMLWrite um die XML Dateien in meinem Programm zu laden, bearbeiten und zu speichern.
Gibt es die Möglichkeit ein XML-Document in einen String zu wandeln, welchen ich dann in der MySQL Dantenbank speichern kann?

Ein anderer Gedanke ist das XML in JSON umzuwandeln. JSON lässt sich wunderbar in einem einzelnen String darstellen. Allerdings müsste ich dann einen XML2JSON und JSON2XML converter schreiben.

Was habt ihr da noch für Ideen?

hubble
Zuletzt geändert von hubblec4 am Di 18. Jul 2017, 15:50, insgesamt 1-mal geändert.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: XML Datei in eine MySQL Datenbank einpflegen

Beitrag von m.fuchs »

Verstehe die Anforderung nicht, XML ist doch ein Textdokument also ein String. Speichere den doch einfach in einem Datenbankfeld.
Wenn du ein TXMLDocument direkt in einem String ablegen möchtest, hilft dir der TStreamXMLWriter weiter.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: XML Datei in eine MySQL Datenbank einpflegen

Beitrag von wp_xyz »

Dafür brauchst du nicht einmal xml2_read usw. Einfach nur die Datei in einen String einlesen und in die Datenbank abspeichern:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  s: String;
  str: TStream;
begin
  str := TFileStream.Create(XML_FILE, fmOpenRead);
  try
    SetLength(s, str.Size);
    str.ReadBuffer(s[1], Length(str));
    Dataset.Insert;
    Dataset.FieldbyName['Xml').AsString := s;
    Dataset.Post;
  finally
    str.Free;
  end;
end;
 

hubblec4
Beiträge: 341
Registriert: Sa 25. Jan 2014, 17:50

Re: XML Datei in eine MySQL Datenbank einpflegen

Beitrag von hubblec4 »

m.fuchs hat geschrieben:Verstehe die Anforderung nicht, XML ist doch ein Textdokument also ein String. Speichere den doch einfach in einem Datenbankfeld.
Wenn du ein TXMLDocument direkt in einem String ablegen möchtest, hilft dir der TStreamXMLWriter weiter.


Ich habe ein XML nicht unbedingt direkt als XML Datei auf der Festplatte, meistens eben nur als XML.Document als variable.


Edit:

TStreamXMLWriter werde ich mir mal anschuen. Danke
Zuletzt geändert von hubblec4 am Di 18. Jul 2017, 15:56, insgesamt 1-mal geändert.

hubblec4
Beiträge: 341
Registriert: Sa 25. Jan 2014, 17:50

Re: XML Datei in eine MySQL Datenbank einpflegen

Beitrag von hubblec4 »

wp_xyz hat geschrieben:Dafür brauchst du nicht einmal xml2_read usw. Einfach nur die Datei in einen String einlesen und in die Datenbank abspeichern:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  s: String;
  str: TStream;
begin
  str := TFileStream.Create(XML_FILE, fmOpenRead);
  try
    SetLength(s, str.Size);
    str.ReadBuffer(s[1], Length(str));
    Dataset.Insert;
    Dataset.FieldbyName['Xml').AsString := s;
    Dataset.Post;
  finally
    str.Free;
  end;
end;
 



Yupp, das sollte auf jedenfall für physische Datein klappen.

Ich habe mal den Thema-Namen angepasst, da ich mehr mit XML.Document zu tun habe als mit einer Datei direkt.
Also in meinem Proggi gibt es eine Variable welche ein XML-Document bereit hält, besser gesagt erstellt(aus einer DatenKlasse heraus).
Wenn ich das XML als Datei brauche dann: WriteXMLFile();

Aber ich möchte jetzt ungern erst die Datei erstellen und diese dann wieder als String einlesen, Datei löschen usw.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: XML Datei-Struktur in eine MySQL Datenbank einpflegen

Beitrag von wp_xyz »

Dann schreib halt in einen MemoryStream, den du genauso wie oben gezeigt in einen einzigen String auslesen kannst. Beliebter Fehler, so nebenbau bemerkt: Nachdem du das XMLDocument in den Memorystream geschrieben hast, musst du den Stream wieder an den Anfang setzen, bevor du den Stream-Inhalt als String auslesen kannst.

hubblec4
Beiträge: 341
Registriert: Sa 25. Jan 2014, 17:50

Re: XML Datei-Struktur in eine MySQL Datenbank einpflegen

Beitrag von hubblec4 »

OK. das wäre auch ne idee. Danke für den Hinweis.

Und für das "Zurück" aus der DB müsste ich dann den String in einen Memory-Stream laden und dann als XML.Document!?

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: XML Datei-Struktur in eine MySQL Datenbank einpflegen

Beitrag von wp_xyz »

per ReadXMLFile aus dem Memorystream ins XMLDocument einlesen. Es ist wie ein Lego-Baukasten. Öffne einfach mal die von dir genannten Units laz2_xmlread, laz2_xmlwrite und laz2_dom (mit gedrückter CTRL-Taste auf dem Unit-Namen klicken) und scrolle durch den Interface-Teil der Units, um die zur Verfügung stehenden Lego-Bausteine kennenzulernen.
Zuletzt geändert von wp_xyz am Di 18. Jul 2017, 16:52, insgesamt 1-mal geändert.

hubblec4
Beiträge: 341
Registriert: Sa 25. Jan 2014, 17:50

Re: XML Datei-Struktur in eine MySQL Datenbank einpflegen

Beitrag von hubblec4 »

Das tue ich schon recht oft. Und ja, manchmal finde ich dann auch das was ich suchte, aber irgendwie wollte es diesmal nicht so recht klappen.

Danke für die Hilfen. Ich versuche es jetzt mal mit diesem Ansatz.

Antworten