waldi18
Goto Top

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!!!!

Content-Key: 272021

Url: https://administrator.de/contentid/272021

Printed on: April 19, 2024 at 23:04 o'clock

Member: colinardo
Solution colinardo May 14, 2015, updated at May 15, 2015 at 09:47:31 (UTC)
Goto Top
Hallo waldi18,
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)
Ausgeführt wird das dann so wie du das vor hattest:
./merge.pl erweitern.xml auslesen.xml
Grüße Uwe
Member: waldi18
waldi18 May 14, 2015 at 17:49:46 (UTC)
Goto Top
Hallo Uwe,
vielen Dank für deine Lösung!
Ich werde sie morgen testen, da ich heute nicht mehr an die Daten komme!
Ich informiere wieder!

Schönen Gruß, Namensvetter
Uwe
Mitglied: 114757
114757 May 14, 2015 updated at 18:05:54 (UTC)
Goto Top
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" face-smile !

Gruß jodel32
Member: waldi18
waldi18 May 15, 2015 at 05:22:57 (UTC)
Goto Top
Hi,
bekomme leider folgende Meldung:
Can't locate auto/XML/LibXML/load_xml.al in @inc (@INC contains: /usr/lib64/perl
5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/
lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.
8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .) at ./merge.pl line 10

Was kann das sein?
Danke für jeden Hinweis,
waldi18
Mitglied: 114757
Solution 114757 May 15, 2015 updated at 09:47:21 (UTC)
Goto Top
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
Member: colinardo
colinardo May 15, 2015 updated at 08:46:51 (UTC)
Goto Top
Zitat von @114757:

> Was kann das sein?
Perl updaten!, 5.8 ist ja schon vollkommen veraltet (mit diversen Sicherheitslücken), das kennt die XML Bibliothek noch
nicht...
Korrekt, so ist es ...
Member: waldi18
waldi18 May 15, 2015 at 09:46:32 (UTC)
Goto Top
Hi zusammen, perfekt, kaum macht man er richtig schon funktioniert es!

PERFEKT

Vielen Dank! Hat super geholfen!

Schönen Gruß
waldi18