簡體   English   中英

幫助解析

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM