XML Datei-Struktur in eine MySQL Datenbank einpflegen

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.

XML Datei-Struktur in eine MySQL Datenbank einpflegen

Beitragvon hubblec4 » 18. Jul 2017, 13:13 XML Datei-Struktur in eine MySQL Datenbank einpflegen

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 18. Jul 2017, 14:50, insgesamt 1-mal geändert.
hubblec4
 
Beiträge: 201
Registriert: 25. Jan 2014, 17:50

Beitragvon m.fuchs » 18. Jul 2017, 13:46 Re: XML Datei in eine MySQL Datenbank einpflegen

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
m.fuchs
 
Beiträge: 1963
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (L 1.8.4, FPC 3.0.4) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon wp_xyz » 18. Jul 2017, 13:47 Re: XML Datei in eine MySQL Datenbank einpflegen

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;
 
wp_xyz
 
Beiträge: 2617
Registriert: 8. Apr 2011, 08:01

Beitragvon hubblec4 » 18. Jul 2017, 14:48 Re: XML Datei in eine MySQL Datenbank einpflegen

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 18. Jul 2017, 14:56, insgesamt 1-mal geändert.
hubblec4
 
Beiträge: 201
Registriert: 25. Jan 2014, 17:50

Beitragvon hubblec4 » 18. Jul 2017, 14:54 Re: XML Datei in eine MySQL Datenbank einpflegen

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.
hubblec4
 
Beiträge: 201
Registriert: 25. Jan 2014, 17:50

Beitragvon wp_xyz » 18. Jul 2017, 15:14 Re: XML Datei-Struktur in eine MySQL Datenbank einpflegen

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.
wp_xyz
 
Beiträge: 2617
Registriert: 8. Apr 2011, 08:01

Beitragvon hubblec4 » 18. Jul 2017, 15:24 Re: XML Datei-Struktur in eine MySQL Datenbank einpflegen

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!?
hubblec4
 
Beiträge: 201
Registriert: 25. Jan 2014, 17:50

Beitragvon wp_xyz » 18. Jul 2017, 15:38 Re: XML Datei-Struktur in eine MySQL Datenbank einpflegen

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 18. Jul 2017, 15:52, insgesamt 1-mal geändert.
wp_xyz
 
Beiträge: 2617
Registriert: 8. Apr 2011, 08:01

Beitragvon hubblec4 » 18. Jul 2017, 15:46 Re: XML Datei-Struktur in eine MySQL Datenbank einpflegen

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.
hubblec4
 
Beiträge: 201
Registriert: 25. Jan 2014, 17:50

• Themenende •

Zurück zu Datenbanken



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried