- 论坛徽章:
- 0
|
回复 5# 104359176
理解与深度没关系,但我生成的XML文档中,不确定有几个同名标签,例如我再简化一下:
1.只有一个<device>标签时,从外部输入的值只能为1:
__DATA__
<device>
<device_name>192.168.1.1</device_name>
</device>
解:
#!/usr/bin/perl
use strict;
use XML::Simple qw(XMLin);
my $device_num = $ARGV[0]; #$device_num =1
my @lines = <DATA>;
my $text = join '', @lines;
my $xml_data = XMLin($text);
my $device_name = $xml_data->{device}->{device_name};
my $config = <<END;
system-view
ip router $device_name
undo shutdown
return
END
print $config;
输出结果为:
system-view
ip router 192.168.1.1
undo shutdown
return
2.有两个及以上<device>标签时,从外部会有一个输入值为第几个<device>,1或2或3或更多,但不能大于<device>标签个数:
__DATA__
<device>
<device_name>192.168.2.1</device_name>
</device>
<device>
<device_name>192.168.3.1</device_name>
</device>
<device>
<device_name>192.168.4.1</device_name>
</device>
解:
#!/usr/bin/perl
use strict;
use XML::Simple qw(XMLin);
my $device_num = $ARGV[0]; #$device_num =1或2或3
my @lines = <DATA>;
my $text = join '', @lines;
my $xml_data = XMLin($text);
my $device_name = $xml_data->{device}[$device_num-1]->{device_name};
my $config = <<END;
system-view
ip router $device_name
undo shutdown
return
END
print $config;
当外部输入的$device_num =1时
输出结果为:
system-view
ip router 192.168.2.1
undo shutdown
return
当外部输入的$device_num =2时
输出结果为:
system-view
ip router 192.168.3.1
undo shutdown
return
当外部输入的$device_num =3时
输出结果为:
system-view
ip router 192.168.4.1
undo shutdown
return
3.当<device>标签不确定时,或一个,或多个,就是将1和2两种情况合并:
我目前做的就是要加一个判断语句。想优化此方案!!!
解:
#!/usr/bin/perl
use strict;
use XML::Simple qw(XMLin);
my $device_num = $ARGV[0]; #$device_num =1
my @lines = <DATA>;
my $text = join '', @lines;
my $xml_data = XMLin($text);
my $device_list = $xml_data->{device};
my $device_times = ref ($device_list) eq ref ([]) ? scalar(@$device_list) : 1;
if ($device_times == 1 ){
my $device_name = $device_list->{device_name};
my $config = <<END;
system-view
ip router $device_name
undo shutdown
return
END
print $config;
}else
{
my $device_name = $xml_data->{device}[$device_num-1]->{device_name};
my $config = <<END;
system-view
ip router $device_name
undo shutdown
return
END
print $config;
}
我就想优化的是第三种情况,能不能不判断标签个数,上面第二种情况包括不了第一种情况,如果光用第二种表达式的话,且xml文档中只有一个标签时,会报错,说没有数组,如何解决???请高手赐教!!!
|
|