in reply to XML::DT and hashes/pointers

use XML::DT;
use Data::Dumper;
my $filename = shift;

%handler=(
  '-type' => {
          top_level => 'MAP',      #
          sub_level_1 => 'SEQ',    # of element  (1)
#         name => 'STR',           # the default
#         junk => 'STR',           # the default
          element => 'MAP'   },    # (2)

  '-default'  => sub{$c},
  element     => sub{ $c->{name} = $v{name}; $c},           # (3)
  sub_level_1 => sub{ +{ map { ($_->{name}, $_) } @$c } },  # (4)
);
print Dumper(dt($filename,%handler));


__END__
________notes:    
(1) See also SEQH instead of SEQ

(2) beeing a MAP the attributes and the tagname are deleted => in this case
  we can add a element processing sub  (see (3))

(3) $c is the ref to hash; "name" att is missing but it is available in %v
  In this sub we copied it
# or if you prefer:
#    element    => sub{ +{ %v, %$c}},   #add all atts in %v to $c

(4) we have a list of ref to hash and we want a hash of hash
      for all the elements in @$c
         make a pair with the name value, and the complete element

Um abraco
J.Joao (jj@di.uminho.pt)