Eine einfache Lösung unter Verwendung von XML :: Twig ist unten. Im Vergleich zur XML :: Simple-Option funktioniert es unabhängig davon, wo sich die Link
-Elemente im XML befinden, und es wird die ursprüngliche Formatierung der Datei berücksichtigt. Es funktioniert auch, wenn der XML-Code gemischte Inhalte enthält.
Wenn Sie die Datei an seinem Platz ändern müssen, können Sie parsefile_inplace
statt parsefile
verwenden, und ich vermute, der reguläre Ausdruck in subs_text
kann im wirklichen Leben verbessert werden muß, aber dieser Code sollte ein guter Ausgangspunkt sein.
#!/usr/bin/perl
use strict;
use warnings;
use XML::Twig;
XML::Twig->new(twig_roots => { Link => \&replace_link, }, # process Link
twig_print_outside_roots => 1, # output everything else
)
->parsefile('my.xml');
sub replace_link
{ my($t, $link)= @_;
$link->subs_text(qr{^http://example\.com/$}, 'http://mysite.com');
$t->flush; # or $link->print, outputs the modified (or not) link
}
+1 für die Angabe einer regulären Ausdrucklösung, die ganz genau weiß, dass die XML-religiösen Fanatiker Sie gnadenlos bestrafen werden! Der Trick, ein aufgeschlossener und nützlicher Systemadministrator zu sein, ist zu wissen, wann eine einfache Lösung zu verwenden ist und wann man das Schwergewicht verwenden sollte (daher haben einige XML-Fans keine Ahnung, dass einfache Lösungen gelegentlich ausreichen). –
Danke :), genau so fühle ich mich bei xml, manchmal braucht man einfach keine vollständige XML-Bibliothek, um so etwas zu ändern. – OneOfOne
Die Sache ist, wir haben nicht viele Informationen über den Rest des XML. Soweit wir wissen, kann es andere Elemente enthalten, die URLs enthalten. Oder sie könnten sie in Zukunft einschließen. Deshalb gebe ich lieber eine Lösung, die in jedem Fall stimmt. – mirod