小弟想寫一個 把XML 檔案轉成 JSON格式
雖然網路上有一些範例 但都無法滿足需求
所以自己寫了一個程式 但似乎有些問題
小弟資質尚淺 無法了解出了甚麼問題
XML檔 (類似這樣的檔案 我要抓出name 把它變成JSON)
<menu>
<name>Status</name>
<child>
<menu>
<name>System</name>
</menu>
<menu>
<name>Link</name>
</menu>
</child>
</menu>
<menu>
<name>Setup</name>
<menu>
依上面的的XML 我預計出來會變成
{"0":Status,"11":"Security","Status":["System","Link"],"1":Setup}
PERL
foreach my $data_tmp (<FILE>)
{
if ($data_tmp =~ m/<name>/)
{
$data_tmp =~ s/<name>//g;
$data_tmp =~ s/<\/name>//g;
$data_tmp =~ s/^\s+//g;
$data_tmp =~ s/\s+$//g;
$tmp = $data_tmp;
}
if ($data_tmp =~ m/<child>/ && $child_check eq 0)
{
$child_check = 1;
$data{$keyword}=$tmp;
$fkeyword = $tmp;
my $tmp_B = $fkeyword;
$tmp_B =~ s/\s+/-/g;
eval('@'.$tmp_B.'=()');
$keyword++;
}elsif ($data_tmp =~ m/<\/child>/ && $child_check eq 1)
{
$child_check = 0;
my $tmp_C = $fkeyword;
$tmp_C =~ s/\s+/-/g;
eval('$data{$fkeyword}=\@'.$tmp_C);
@child=();
$fkeyword='';
}elsif ($child_check eq 1 && $data_tmp !~ m/>/ && $tmp ne '')
{
my $tmp_A = $fkeyword;
$tmp_A =~ s/\s+/-/g;
eval('push @'.$tmp_A.',$tmp');
$tmp = '';
}
}
my $json = encode_json \%data;
print $json;
實際上跑出來
{"Web":134677984,"11":"Security","Status":["System","Link"]}
(只貼一部份資料 資料太多)
會看到 Web 的資料變成 一串數字 但Status 的資料卻又正常
想請問各位 有人知道發生了甚麼問題嗎???
謝謝