使用XML::SImple来读写XML
t.xml
<?xml version="1.0" ?> <rtsp_execute> <data name="xcoder" tag="abc" id="001">StreamingMediaTranscoder.exe</data> <data name="src.ip" tag="123" id="002">10.239.254.202</data> <data name="src.rtsp_port">8554</data> <data name="options">-u SPEED -stats</data> <data>XXXXXXXXXXXXXXXXXXXXXXXXX</data> <param name="kill_at_session_end">1</param> <param name="session_liveness_timeout">0</param> </rtsp_execute>
读xml
use strict; use warnings; use XML::Simple; use Data::Dumper; use 5.010; my $xmlfile = "t.xml"; my $xml = XML::Simple->new(KeyAttr=>"",ForceArray => 1); my $tree = $xml->XMLin($xmlfile); say Dumper($tree); my @datas = @{$tree->{"data"}}; my $len = @datas; say "data length = $len"; foreach(@datas){ if(ref($_) eq 'HASH'){ my %itmes = %{$_}; say $itmes{'content'}; }else{ say $_; } }
输出结果
$VAR1 = { 'data' => [ { 'id' => '001','name' => 'xcoder','content' => 'StreamingMediaTranscoder.exe','tag' => 'abc' },{ 'content' => '10.239.254.202','tag' => '123','id' => '002','name' => 'src.ip' },{ 'name' => 'src.rtsp_port','content' => '8554' },{ 'content' => '-u SPEED -stats','name' => 'options' },'XXXXXXXXXXXXXXXXXXXXXXXXX' ],'param' => [ { 'name' => 'kill_at_session_end','content' => '1' },{ 'name' => 'session_liveness_timeout','content' => '0' } ] }; data length = 5 StreamingMediaTranscoder.exe 10.239.254.202 8554 -u SPEED -stats XXXXXXXXXXXXXXXXXXXXXXXXX写xml