taginfo.pl

来自「PERL语言资料 可以用于PERL程序设计」· PL 代码 · 共 74 行

PL
74
字号
#!/usr/bin/perl
# Fig. 22.21: taginfo.pl
# SAX example.

use warnings;
use strict;
use XML::Parser;

my ( $file, $tag ) = @ARGV;

my $parser = new XML::Parser( ErrorContext => 2 );

$parser->setHandlers( Char => \&charHandler,
                      Start => \&startHandler,
                      End   => \&endHandler  );

my $depth = 0;
$parser->parsefile( $file );

sub startHandler
{
   my ( $expat, $element, @attributes ) = @_;
   return if ( !$element );
   if ( $element eq $tag ) {
      print( "\n", ' ' x $depth,
         "<$tag> starts on line ", $expat->current_line(), "\n" );
      $depth += 3; 
      
      print( ' ' x $depth, "Parent tag: ",$expat->current_element(),
         "\n", ' ' x $depth, "Depth: ", $expat->depth(), "\n",
         ' ' x $depth, "Attributes: @attributes\n" );
   }
   elsif ( $expat->current_element() eq $tag ) {
      print( ' ' x $depth, "Child: $element\n" );
   }
}

sub endHandler
{
   my ( $expat, $element ) = @_;
   
   if ( $element eq $tag ) {
      $depth -= 3;
      
      print( ' ' x $depth, "<\\$element> ends on line ",
         $expat->current_line(), "\n\n" );
   }
}

sub charHandler
{
   my ( $expat, $data ) = @_;
   
   if ( $expat->current_element() eq $tag ) {
      $data =~ s/^\s+//;
      $data =~ s/\s+$//;
      print( ' ' x $depth, "Data: $data\n" ) if ( $data );
   }
}

 ########################################################################## 
 # (C) Copyright 2001 by Deitel & Associates, Inc. and Prentice Hall.     #
 # All Rights Reserved.                                                   #
 #                                                                        #
 # DISCLAIMER: The authors and publisher of this book have used their     #
 # best efforts in preparing the book. These efforts include the          #
 # development, research, and testing of the theories and programs        #
 # to determine their effectiveness. The authors and publisher make       #
 # no warranty of any kind, expressed or implied, with regard to these    #
 # programs or to the documentation contained in these books. The authors #
 # and publisher shall not be liable in any event for incidental or       #
 # consequential damages in connection with, or arising out of, the       #
 # furnishing, performance, or use of these programs.                     #
 ##########################################################################

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?