[英]help in parsing
我有一個XML文件,如下所示,
<message1>
<val1>100</val1>
<val2>200</val2>
<val3>300</val3>
<val4>400</val4>
</message1>
<message2>
<val1>100</val1>
<val2>200</val2>
<val3>300</val3>
<val4>400</val4>
</message2>
我必須解析值(val),並且我無法使用XML :: Simple模塊。 解析應當從開始<message1>
和我必須把這些值在陣列中,直到</message1>
然后我需要重復此為<message2>
直到</message2>
從圖片上看就像
<message1>
----100
----200
----300
----400
</message1>
<message2>
----100
----200
----300
----400
</message2>
任何人都可以幫助我..我在掙扎很多
謝謝
森提爾·庫瑪(Senthil Kumar)
既然我們回到1999年,我想我會忘記嚴格和警告,使用符號引用和字符串eval來完成此工作:
#!/usr/bin/perl
while( <DATA>)
{ s{<(message\d)>}{\@$1=(}; # @message1=(
s{<val\d>}{}; #
s{<\/val\d>}{,}; # ,
s{</message\d>}{);}; # );
$s.=$_;
};
eval $s;
$,= ", "; $\= "\n";
foreach (1..2) { print "\@message$_: ", @{"message$_"}; }
__DATA__
<message1>
<val1>100</val1>
<val2>200</val2>
<val3>300</val3>
<val4>400</val4>
</message1>
<message2>
<val1>100</val1>
<val2>200</val2>
<val3>300</val3>
<val4>400</val4>
</message2>
(以防萬一還不清楚:那是個玩笑!他們說“您是否嘗試過使用XML解析器?”)
假設您輸入的內容完全符合您的顯示要求,則應執行以下操作。 但是,通過將根元素包裝在所有內容周圍或分別解析每條消息,最好使真正的XML解析器正常工作。
use strict;
use warnings;
my %data;
while (<>) {
# skip blank lines
next unless /\S/;
my ($tag) = /^<(.*)>$/
or warn("expected tag, got $_ "), next;
$data{$tag} ||= [];
while (<>) {
last if /^<\/\Q$tag\E>$/;
my (undef, $value) = /^<val(\d+)>(.*)<\/val\1>$/
or warn("expected val, got $_ "), next;
push @{ $data{$tag} }, $value;
}
}
use Data::Dumper;
print Dumper \%data;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.