Display current events on the main page automatically
[infodrom.org/oldenburg.linux.de] / Styles / fileutils.pl
1 <:
2
3 # <teite>
4 # perl -w -MXML::Parser -MData::Dumper -e '$p=new XML::Parser(Style => 'Tree');
5 #  $tree=$p->parsestring("<foo><head>Hello</head></foo>");print Dumper($tree);'
6
7 sub parse_xmlfile
8 {
9     my $fname = shift;
10     my $entity;    # Current entity name
11     my %entity;    # Hash of lists
12     my $list;      # Reference to List of entries
13     my $entry;     # Reference to Each read entry
14     my $sort = ''; # Sort-criteria
15     my %tmp;
16     my $elem;
17     my %elm;
18
19     open (S, "$fname");
20     while (<S>) {
21         #next if (/^#/);
22         #next if (/^\s*$/);
23              
24         if (/<entity=\"(.*)\"\s+sort=\"(.*)\">/) {
25             $entity = $1;
26             $sort = $2;
27             $list = [];
28         } elsif (/<entity=\"(.*)\">/) {
29             $entity = $1;
30             $list = [];
31         } elsif (/<\/entity>/) {
32             if ($sort) {
33                 %tmp = ();
34                 foreach $elem (@$list) {
35                     %elm = %{$elem};
36                     if (length ($elm{$sort}) > 0) {
37                         $tmp{$elm{$sort}} = $elem;
38                     } else {
39                         $tmp{"x"x100} = $elem;
40                     }
41                 }
42                 @$list = ();
43                 foreach $elem (sort keys %tmp) {
44                     push (@$list, $tmp{$elem});
45                 }
46             }           
47             $entity{$entity} = $list;
48         } elsif (/<entry>/) {
49             $entry = {};
50         } elsif (/<\/entry>/) {
51             # $list[$#list+1] = \%entry;
52             push (@$list, $entry);
53         } elsif (/^\s*(\S+):\s*(.*)$/) {
54             $$entry{$1} = $2;
55         }
56     }
57     close (S);
58     return %entity;
59 }
60
61 # Zum Lesen & verarbeiten:
62
63 # %data = parse_xmlfile ("search.xml");
64
65 # foreach $i (keys %data) {
66 #     printf "%s\n", $i;
67 #     $list = $data{$i};
68 #     @list = @$list;
69 #        <alternativ> %entry = %{$slist[$i]};
70 #     foreach $k (@list) {
71 #         %entry = %$k;
72 #         foreach $j (keys %entry) {
73 #             printf "  %s: %s\n", $j, $entry{$j};
74 #         }
75 #         print "\n";
76 #     }
77 # }
78
79 :>