my $iter = XML::LibXML::Iterator->new($root); while($iter->next) { my $buttonref = undef; my $node = $iter->current; my $name = lc($node->getName); if($name eq 'button') { $buttonref = {}; $buttonref->{BUTTON_ID} = $node->getAttribute('id'); $buttonref->{BUTTON_TITLE} = $node->getAttribute('title'); $buttonref->{BUTTON_TEXT} = $node->getAttribute('text'); $buttonref->{BUTTON_ALIGN} = $node->getAttribute('align'); $buttonref->{BUTTON_ISDROPDOWN} = $node->getAttribute('dropdown'); my $iter = XML::LibXML::Iterator->new($node); while($iter->next) { my $node = $iter->current; my $name = lc($node->getName); if($name eq 'image') { $buttonref->{BUTTON_IMAGE_SRC} = $node->getAttribute('src'); $buttonref->{BUTTON_IMAGE_WIDTH} = $node->getAttribute('width'); $buttonref->{BUTTON_IMAGE_HEIGHT} = $node->getAttribute('height'); $buttonref->{BUTTON_IMAGE_ALT} = $node->getAttribute('alt'); } elsif($name eq 'action') { my $type = $node->getAttribute('type'); my $prefix = 'BUTTON_ACTION_'.uc($type); $buttonref->{$prefix} = 1; $buttonref->{$prefix.'_EVENT'} = $node->getAttribute('event'); $buttonref->{$prefix.'_ACTION'} = $node->getAttribute('action'); } } } elsif($name eq 'seperator') { $buttonref = {}; $buttonref->{BUTTON_ISSEPERATOR} = 1; } if(defined $buttonref) { if(lc($buttonref->{BUTTON_ALIGN}) eq 'right') { push @buttonsright, $buttonref; } else { push @buttonsleft, $buttonref; } } }