home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / share / doc / libxml-grove-perl / examples / grove.pl next >
Encoding:
Text File  |  1999-10-23  |  1.4 KB  |  58 lines

  1. #
  2. # Copyright (C) 1998 Ken MacLeod
  3. # See the file COPYING for distribution terms.
  4. #
  5. # $Id: grove.pl,v 1.4 1999/05/06 23:13:02 kmacleod Exp $
  6. #
  7.  
  8. use XML::Parser::PerlSAX;
  9. use XML::Grove;
  10. use XML::Grove::Builder;
  11.  
  12. my $builder = XML::Grove::Builder->new;
  13. my $parser = XML::Parser::PerlSAX->new(Handler => $builder);
  14.  
  15. my $doc;
  16. foreach $doc (@ARGV) {
  17.     my $grove = $parser->parse (Source => { SystemId => $doc });
  18.  
  19.     dump_grove ($grove);
  20. }
  21.  
  22.  
  23. sub dump_grove {
  24.     my $grove = shift;
  25.     my @context = ();
  26.  
  27.     _dump_contents ($grove->{Contents}, \@context);
  28. }
  29.  
  30. sub _dump_contents {
  31.     my $contents = shift;
  32.     my $context = shift;
  33.  
  34.     foreach $item (@$contents) {
  35.     if (ref ($item) =~ /::Element/) {
  36.         push @$context, $item->{Name};
  37.         my @attributes = %{$item->{Attributes}};
  38.         print STDERR "@$context \\\\ (@attributes)\n";
  39.         _dump_contents ($item->{Contents}, $context);
  40.         print STDERR "@$context //\n";
  41.         pop @$context;
  42.     } elsif (ref ($item) =~ /::PI/) {
  43.         my $target = $item->{Target};
  44.         my $data = $item->{Data};
  45.         print STDERR "@$context ?? $target($data)\n";
  46.     } elsif (ref ($item) =~ /::Characters/) {
  47.         my $data = $item->{Data};
  48.         $data =~ s/([\x80-\xff])/sprintf "#x%X;", ord $1/eg;
  49.         $data =~ s/([\t\n])/sprintf "#%d;", ord $1/eg;
  50.         print STDERR "@$context || $data\n";
  51.     } elsif (!ref ($item)) {
  52.         print STDERR "@$context !! SCALAR: $item\n";
  53.     } else {
  54.         print STDERR "@$context !! OTHER: $item\n";
  55.     }
  56.     }
  57. }
  58.