Hallo, Am Sa, 22 Okt 2022, Norbert Zawodsky schrieb:
inotifywait -- super!
Mit inotifywait warten. Wenn eine Datei angekommen ist, mit den xmltools parsen und z.B. ein csv generieren. Das csv dann mit 'mysql' in die Datenbank füttern. Auf den ersten Blick nicht schwierig. (mal sehen welche Stolpersteine auftauchen...)
Erstens: für mich klingt incrond fast interessanter, um den scriptaufruf auszulösen ... Zweitens: Kannst du ein wenig perl? Das ist für solche Aufgaben ideal geeignet und kann XML parsen (mit diversen Backends wie expat, libxml). Dabei gibt's dann diverse Module über die man recht bequem z.B. per XPath auf bestimmte Daten zugreifen kann. Die geparsten Daten kann man dann direkt per DBI in ne DB schreiben. Und für das Programmier-Interface DBI gibt's in Perl diverse Backends, u.a. für mysql/mariadb, postgres und *tada* auch für .csv ;) Grundidee, eher platzsparend statt schön formatiert: ==== #!/usr/bin/perl -w use strict; use XML::TreeBuilder; use XML::XPathEngine; use DBI; ### "DB"-Verbindungen herstellen my $dbh = DBI->connect("dbi:mysql:dbname=$dbname", ...) or die "Cannot connect to MySQL: $DBI::errstr"; my $csv = DBI->connect ("dbi:CSV:", ...) or die "Cannot connect to CSV: $DBI::errstr"; my $mst = $dbh->prepare('INSERT INTO mytable(a) VALUES (?)'); my $cst = $csv->prepare('INSERT INTO mytable(a) VALUES (?)'); ### XML einlesen my $xp = XML::XPathEngine->new(); # Optionen möglich my $xmltree = XML::TreeBuilder->new(); # Optionen möglich $xmltree->parse_file($ARGV[1]) or die; ### geparstes XML verarbeiten, z.B. my @grandkids = $xp->find('/root/kid/grandkid[3]', $xmltree); foreach my $gk (@grandkids) { $cst->bind_param($gk->{'foo'}, $gk->{'bar'}); $cst->execute(); $mst->bind_param($gk->{'foo'}, $gk->{'bar'}); $mst->execute(); } ### "DB" Verbindungen schließen $csv->disconnect(); $dbh->disconnect(); ### XML-Tree abräumen $xmltree->delete(); ==== Das geht garantiert besser. Soll nur als (Grund-)Ideengeber dienen. Der Vorteil von DBI ist u.a., daß die Schnittstelle eben (so weit es möglich ist) bei allen Datenbanken von CSV über SQLite, MySQL/MariaDB, PostgreSQL bis hin zu Oracle oder DB/2 oder weiß der Geier gleich bleibt... Achso: ich hab grad ohne nachzuschauen und ggfs. zu testen keinen Schimmer, ob das mit dem ->prepare(..) und ->bind_param(..) so korrekt ist. Ist lange her, daß ich das verwendet habe. Aber die Schnittstelle ist noch so wie damals vor, öhm, wohl ca. 20 Jahren ;) Und eben: in perl kannst du das ganze Geraffel (XML einlesen, parsen, Daten rausprökeln, in CSV und/oder DB wegschreiben) recht bequem quasi auf einen Schlag abhandeln. Geht mit python genauso gut, soweit ich weiß. Nur ziemlich anders ;) Aber perl/python bieten sich extrem an für das was du vorzuhaben scheinst. HTH, -dnh -- C, on the other hand, has a reputation as something that will segfault your foot off if you look at the compiler funny, so by and large it scares off those who should leave coding to others. -- AdB re PHP