sub start_document { my $self = shift; $self->{lists} = []; $self->{curlist} = $self->{tree} = []; } # # sub start_element { my $self = shift; my $element = shift; my $name = $element->{Name}; $self->{elem_name} = $element->{Name}; my $id; my $var; if ($element->{Attributes}) { $id = $element->{Attributes}->{'{}id'}->{Value}; $var = $element->{Attributes}->{'{}var'}->{Value}; } if ($name eq 'part') { my $newlist = [ {id=>$id, var=>$var} ]; push @{ $self->{lists} }, $self->{curlist}; if ($is_parent) { push @{$self->{curlist}[0]{childs}}, @{$newlist}; } else { push @{ $self->{curlist} }, @{$newlist}; } $self->{curlist} = $newlist; } $is_parent++ if $element->{Name} eq 'part'; } # # sub end_element { my $self = shift; my $element = shift; my $name = $element->{Name}; # Save template name; if ($name eq 'template') { $self->{template} = $self->{char}; } if ($name eq 'part') { $self->{curlist} = pop @{ $self->{lists} }; $is_parent--; } } # # sub characters { my $self = shift; my $chars = shift; my $text = $chars->{Data}; my $clist = $self->{curlist}; $self->{char} = codes2chars($text); } # # sub end_document { my $self = shift; delete ($self->{curlist}); delete ($self->{lists}); my $tree = $self->{tree}; delete ($self->{tree}); $struct->{$self->{menu_name}}->{parts} = $tree; $struct->{$self->{menu_name}}->{template} = $self->{template}; }
In reply to Re^4: Building simple tree from XML
by shady
in thread Building simple tree from XML
by shady
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |