XML の更新に助けが必要です。私はこのリンクを通過しましたが、非常に役に立ちました。
引き続き、以下のコードを作成しましたが、さらにヘルプが必要です。置き換えたいタグ値は「numCoreThreads」です。
タグ値を指定すると、値が置き換えられ、正常に機能します。
- 指定された値に存在する値をコードで置き換えたいと思います。
また、親タグの下に新しいタグを追加するにはどうすればよいですか。Exp 追加タグ -
<OptimizeThreshold>250</OptimizeThreshold> under <ftOptimizeThreshold>1000</ftOptimizeThreshold>
私のXML -->
<svr_config>
<port>34343</port>
<PortMapper>false</PortMapper>
<numCoreThreads>12</numCoreThreads>
<plugins>
<plugin>
<userDefined>
<ftOptimizeThreshold>1000</ftOptimizeThreshold>
</userDefined>
</plugin>
</plugins>
現在のコード -->
#!C:\strawberry\perl
use strict;
use warnings;
use XML::Twig;
XML::Twig->new( twig_roots => { numCoreThreads => sub { $_->flush }, },
twig_handlers => { 'numCoreThreads[string()="12"]' => sub { $_->set_text( '5000'); } },
twig_print_outside_roots => 1,
)
->parsefile_inplace( 'config.xml');
入力ファイルを読み取り、入力ファイルから読み取った引数に基づいてxmlを更新するなど、コードをより動的にしようとしています。私は知っています...ループを実行すると、ファイル全体が再び印刷されます...それを最適化できますか?
私の入力ファイルは次のようになります
numCoreThreads: 20
OptimizeThreshold: ftOptimizeThreshold: 250
私が作成したコードは次のようになります。
#!C:\strawberry\perl
use strict;
use warnings;
use XML::Twig;
open(IN1,"INPUT_FTS_XML_PRIMARY.txt");
while(my $r=<IN1>)
{
$r=~/(.*:)\s(.*)/;
my $c1=$1;
my $d1=$2;
my $f1=$3
my $twig = XML::Twig->new(
twig_handlers => {
'$c1' => sub { $_->set_text( 'd1' ) },
if (defined $f1)
{
'$d1' => sub {
my $e = XML::Twig::Elt->new( '$c1' => '$f1' );
$e->move( after => $_ );
},}
},
pretty_print => 'indented',
)->parsefile( shift )->print;
}