您好我正在尝试插入一个新元素,以便我从这个
开始 <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>
我的代码如下,但我已经阅读了两天的引用和引用,但仍然无法得到它。我试图做一些不可能的事情,或者有人能告诉我如何做事。
谢谢!
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>
答案 0 :(得分:3)
你有一个数组,其中有四个元素代表每个explicit_group
元素。您想要标识名称属性为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';
}
}