- 论坛徽章:
- 7
|
本帖最后由 rubyish 于 2013-12-15 20:32 编辑
错误的用法~ )
xml 与 hash 类似,一个一个 key, value.
biru:key : device
value: "BJ-1"
line 45~47- my $function=$gen->function( $gen->device("BJ-1"),
- $xml_rule_list_final
- );
复制代码 你这样做是类似下面的代码:- my %hash;
- my $value = '{ a => 1, b => 2 }';
- $hash{key} = $value;
复制代码 now 你想要你想输出为什么不是 1 呢?
'{ a => 1, b => 2 }' 看起来类似 hash ref, 但它不
该怎么解决?
1: 手动编辑(copy, paste) + 格式化
可以copy过去一个XML字符串
paste,并将它格式化.
XML格式化工具,在
http://www.freeformatter.com/xml-formatter.html
2: dosomething
biru:- use XML::Generator;
- my $xml_rule_list_final = "<rule_list>
- <interface_name> fastethernet0/0/3</interface_name>
- <interface_dir>in</interface_dir>
- <host>
- <operator>deny</operator>
- <protocol_type>ip</protocol_type>
- <des_ip>192.168.45.0</des_ip>
- <des_mask>0.0.0.255</des_mask>
- <des_operator>eq</des_operator>
- <des_port>80</des_port>
- <sou_ip>192.168.1.0</sou_ip>
- <sou_mask>0.0.0.255</sou_mask>
- <sou_operator>eq</sou_operator>
- <sou_port>80</sou_port>
- </host>
- <host>
- <operator>permit</operator>
- <protocol_type>tcp</protocol_type>
- <des_ip>192.168.4.0</des_ip>
- <des_mask>0.0.0.255</des_mask>
- <des_operator>range</des_operator>
- <des_port>56-78</des_port>
- <sou_ip>192.168.12.0</sou_ip>
- <sou_mask>0.0.0.255</sou_mask>
- <sou_operator>lt</sou_operator>
- <sou_port>23</sou_port>
- </host>
- <host>
- <operator>deny</operator>
- <protocol_type>ip</protocol_type>
- <des_ip>0.0.0.0</des_ip>
- <des_mask>255.255.255.255</des_mask>
- <des_operator>eq</des_operator>
- <des_port>80</des_port>
- <sou_ip>10.10.10.0</sou_ip>
- <sou_mask>0.0.0.255</sou_mask>
- <sou_operator>eq</sou_operator>
- <sou_port>80</sou_port>
- </host>
- </rule_list>";
- my ( $interface, @host ) = split /<host>/, $xml_rule_list_final;
- my ( $interface_name, $interface_dir ) =
- $interface =~ /me>\s*(.*?)<.*>(.*)</s;
- @host = map { { /<(\w+)>(.*?)</sg } } @host;
- my @host_key = qw/operator
- protocol_type
- des_ip
- des_mask
- des_operator
- des_port
- sou_ip
- sou_mask
- sou_operator
- sou_port/;
- my $gen = new XML::Generator(
- 'conformance' => 'strict',
- 'escape' => 'always',
- 'pretty' => 2,
- 'encoding' => 'utf-8'
- );
- my $xml = $gen->function(
- $gen->device("BJ-1"),
- $gen->rule_list(
- $gen->interface_name($interface_name),
- $gen->interface_dir($interface_dir),
- map {
- my %h = %$_;
- $gen->host( map { $gen->$_( $h{$_} ) } @host_key )
- } @host
- )
- );
- print $gen->xmldecl;
- print $xml;
复制代码 |
|