Perl Script unter Linux: 2 Dateien, bestimmten Inhalt zusammenspielen
Bitte um dringende Hilfe.
Ich habe 2 Dateien (in meinem Fall XML), einer der beiden (1.Datei) muss mit Teil-Inhalt einer 2. erweitert werden.
Allerdings eben nicht komplett, sondern mit dem Zeilenanfang des ersten Auftretens von <object....
dann komplett von da an alles bis Zeilenende vor </objects> (beachten: Unterschied object und objects!).
Die 1. Datei ist auch so aufgebaut. Der ausgelesene Teil-Inhalt der 2. Datei soll dann in die 1. Datei geschrieben werden, und zwar:
zwischen:
</object>
</objects>
Am besten 3 Leerzeieln zwischen diesen beiden Tag's und in die Mitte dann den Text der 2. Datei schreiben (dann kann man später einfach danach suchen):
</object>
. <object....
Diese Script sollte mit Parameter aufrufbar sein: die erste Datei ist diejenige welche erweitert werden soll,
aus der 2. Datei soll dann gelesen werden, in etwa so: ./merge.pl erweitern.xml auslesen.xml
Nach dem Script soll die 1. Datei eben um den Teilinhalt der 2. gewachsen sein und die 2. Datei bleibt wie sie war.
Hier kurz wie die Dateien aussehen:
<XML......
.
.
.
<objects>
.
<xxxxxx>
.
. <object....
.
.
.
.
</object>
</objects>
</xxxxxx>
Wäre so etwas möglich?
Vielen, lieben Dank an euch!!!!
Ich habe 2 Dateien (in meinem Fall XML), einer der beiden (1.Datei) muss mit Teil-Inhalt einer 2. erweitert werden.
Allerdings eben nicht komplett, sondern mit dem Zeilenanfang des ersten Auftretens von <object....
dann komplett von da an alles bis Zeilenende vor </objects> (beachten: Unterschied object und objects!).
Die 1. Datei ist auch so aufgebaut. Der ausgelesene Teil-Inhalt der 2. Datei soll dann in die 1. Datei geschrieben werden, und zwar:
zwischen:
</object>
</objects>
Am besten 3 Leerzeieln zwischen diesen beiden Tag's und in die Mitte dann den Text der 2. Datei schreiben (dann kann man später einfach danach suchen):
</object>
. <object....
Diese Script sollte mit Parameter aufrufbar sein: die erste Datei ist diejenige welche erweitert werden soll,
aus der 2. Datei soll dann gelesen werden, in etwa so: ./merge.pl erweitern.xml auslesen.xml
Nach dem Script soll die 1. Datei eben um den Teilinhalt der 2. gewachsen sein und die 2. Datei bleibt wie sie war.
Hier kurz wie die Dateien aussehen:
<XML......
.
.
.
<objects>
.
<xxxxxx>
.
. <object....
.
.
.
.
</object>
</objects>
</xxxxxx>
Wäre so etwas möglich?
Vielen, lieben Dank an euch!!!!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 272021
Url: https://administrator.de/contentid/272021
Ausgedruckt am: 24.11.2024 um 05:11 Uhr
7 Kommentare
Neuester Kommentar
Hallo waldi18,
das könnte etwa so aussehen:
Ausgeführt wird das dann so wie du das vor hattest:
Grüße Uwe
das könnte etwa so aussehen:
#!/usr/bin/perl
use XML::LibXML;
use XML::Twig;
# Dateien öffnen
open my $file1, '<', $ARGV;
open my $file2, '<', $ARGV[1];
binmode $file1;binmode $file2;
# Dateien in XML-Objekte einlesen
my $doc1 = XML::LibXML->load_xml(IO => $file1);
my $doc2 = XML::LibXML->load_xml(IO => $file2);
close($file1);close($file2);
# 'object' Elemente holen
my @objectnodes = $doc2->getElementsByTagName('object');
# Insert-Node im ersten Dokument holen
my $insertnode = ($doc1->getElementsByTagName('objects'));
# object nodes in das erste Dokument yxin den 'objects' tag anfügen
foreach(@objectnodes){$insertnode->appendChild($_);}
# schön formatieren
my $twig = XML::Twig->new(pretty_print => 'indented');
$twig->set_indent(' ' x 4);
# File speichern
$twig->parse($doc1->toString())->print_to_file($ARGV)
./merge.pl erweitern.xml auslesen.xml
Moin @colinardo,
Danke dir auch für das Script !! Das kann ich bei einem meiner Projekte auch gut gebrauchen, habs gerade mal getestet und läuft wie Schmidts Katze ...
"Da schick ich dir doch glatt noch das halb volle Fäßchen Bier vom Vatertagsausklang" !
Gruß jodel32
Danke dir auch für das Script !! Das kann ich bei einem meiner Projekte auch gut gebrauchen, habs gerade mal getestet und läuft wie Schmidts Katze ...
"Da schick ich dir doch glatt noch das halb volle Fäßchen Bier vom Vatertagsausklang" !
Gruß jodel32
Was kann das sein?
Perl updaten!, 5.8 ist ja schon vollkommen veraltet (mit diversen Sicherheitslücken), das kennt die XML Bibliothek noch nicht...http://deps.cpantesters.org/?module=XML%3A%3ALibXML&perl=5.8.8& ...
Gruß jodel32