0

こんにちは、これから行くために新しい要素を挿入しようとしています

   <explicit-group name="CDEV">
      <aip-address>1.1.1.1</aip-address>
      <aip-address>2.2.2.2</aip-address>
      <aip-address>3.3.3.3</aip-address>

これに

   <explicit-group name="CDEV">
      <aip-address>1.1.1.1</aip-address>
      <aip-address>2.2.2.2</aip-address>
      <aip-address>3.3.3.3</aip-address>
      <aip-address>99.99.99.254</aip-address>

私が持っているコードは次のとおりですが、参照と参照解除について2日間読んでいますが、まだ取得できません。私は不可能なことをしようとしていますか、それとも誰かが私にその方法を教えてくれますか?

ありがとう!

use strict;
use XML::Simple;
use Data::Dumper;
my $xs = XML::Simple->new(
  XMLDecl => '<?xml version="1.0" encoding="UTF-8"?>',
  forcearray => [ 'item' ],
  keyattr    => {   },
  rootname   => 'SG-distribution',
);

my $opt = $xs->XMLin(\*DATA);


push @{ $opt->{'sa-coller'}->{'explicit-group'} } , { {'CDEV'}->{'aip-address'} };

print Dumper($opt);
print $xs->XMLout($opt);

__DATA__
<?xml version="1.0" encoding="UTF-8"?><SG-distribution>
  <sa-coller name="W8-C1" enabled="true" host="localhost" port="99">
    <ip-group name="home" ipAddressMask="192.168.0.*" match="glob"/>
    <ip-group name="home2" ipAddressMask="10.0.0.*" match="glob"/>
    <explicit-group name="CDEV">
      <aip-address>1.1.1.1</aip-address>
      <aip-address>2.2.2.2</aip-address>
      <aip-address>3.3.3.3</aip-address>
    </explicit-group>
    <explicit-group name="HYU"/>
    <explicit-group name="JUN"/>
  </sa-coller>
</SG-distribution>
4

1 に答える 1

3

各要素を表す 4 つの要素を持つ配列がありexplicit_groupます。name 属性が であるものを識別したいとしますCDEV。それらは名前ではなく(位置で)インデックス付けされているため、正しい要素を見つけるために配列を反復処理する必要があります。

for my $explicit_group (@{ $opt->{'sa-coller'}{'explicit-group'} }) {
  if ($explicit_group->{name} eq 'CDEV') {
     push @{ $explicit_group->{'aip-address'} }, '99.99.99.254';
   }
}
于 2013-02-09T02:15:39.463 に答える