シンプルなソリューションを::小枝は以下の通りです。 XML :: Simpleオプションと比較すると、要素がXML内のどこにあっても機能し、ファイルの元のフォーマットを尊重します。また、XMLに混在コンテンツが含まれている場合にも機能します。
あなたの場所にファイルを変更する必要がある場合は、代わりにparsefile
のparsefile_inplace
を使用することができ、私はsubs_text
の正規表現は、実際の生活の中で改善する必要があるかもしれませんが、このコードは良い出発点であるべきと思います。
#!/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正規表現の解決策を指定するには、XMLの宗教的な善意者があなたを無慈悲に罰するでしょう!開放的で有用なシステム管理者であることの秘訣は、単純な解決策をいつ使用するのか、重量の重いものをいつ使用するのかを知ることです(単純な解決策では時折十分であるという考えはほとんどありません)。 –
ありがとうございました:)これはまさに私がXMLについてどのように感じているか、時にはこのようなものを変更するために完全なXMLライブラリを必要としないことがあります。 – OneOfOne
これは、XMLの残りの部分についてはあまり情報がありません。私たちが知っているすべてのものには、URLを含む他の要素が含まれるかもしれません。あるいは、将来それらを含むかもしれない。だからこそ私はむしろ正しい解決策を提供しています。 – mirod