⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlstats

📁 one of the linux gd libraries
💻
字号:
#!/usr/local/bin/perl -w## $Revision: 1.1.1.1 $## $Date: 2003/07/27 11:07:11 $package Elinfo;sub new {    bless { COUNT   => 0,            MINLEV  => undef,            SEEN    => 0,            CHARS   => 0,            EMPTY   => 1,             PTAB    => {},            KTAB    => {},            ATAB    => {} }, shift;}package main;use English;use XML::Parser;my %elements;my $seen = 0;my $root;my $file = shift;my $subform =    '      @<<<<<<<<<<<<<<<      @>>>>';die "Can't find file \"$file\""  unless -f $file;    my $parser = new XML::Parser(ErrorContext => 2);$parser->setHandlers(Start => \&start_handler,		     Char  => \&char_handler);$parser->parsefile($file);set_minlev($root, 0);my $el;foreach $el (sort bystruct keys %elements){    my $ref = $elements{$el};    print "\n================\n$el: ", $ref->{COUNT}, "\n";    print "Had ", $ref->{CHARS}, " bytes of character data\n"	if $ref->{CHARS};    print "Always empty\n"	if $ref->{EMPTY};    showtab('Parents', $ref->{PTAB}, 0);    showtab('Children', $ref->{KTAB}, 1);    showtab('Attributes', $ref->{ATAB}, 0);}################## End of main################sub start_handler{    my $p = shift;    my $el = shift;    my $elinf = $elements{$el};    if (not defined($elinf))    {	$elements{$el} = $elinf = new Elinfo;	$elinf->{SEEN} = $seen++;    }    $elinf->{COUNT}++;    my $partab = $elinf->{PTAB};    my $parent = $p->current_element;    if (defined($parent))    {	$partab->{$parent}++;	my $pinf = $elements{$parent};	# Increment our slot in parent's child table	$pinf->{KTAB}->{$el}++;	$pinf->{EMPTY} = 0;    }    else    {	$root = $el;    }    # Deal with attributes    my $atab = $elinf->{ATAB};    while (@_)    {	my $att = shift;		$atab->{$att}++;	shift;	# Throw away value    }}  # End start_handlersub char_handler{    my ($p, $data) = @_;    my $inf = $elements{$p->current_element};    $inf->{EMPTY} = 0;    if ($data =~ /\S/)    {	$inf->{CHARS} += length($data);    }}  # End char_handlersub set_minlev{    my ($el, $lev) = @_;    my $elinfo = $elements{$el};    if (! defined($elinfo->{MINLEV}) or $elinfo->{MINLEV} > $lev)    {	my $newlev = $lev + 1;	$elinfo->{MINLEV} = $lev;	foreach (keys %{$elinfo->{KTAB}})	{	    set_minlev($_, $newlev);	}    }}  # End set_minlevsub bystruct{    my $refa = $elements{$a};    my $refb = $elements{$b};    $refa->{MINLEV} <=> $refb->{MINLEV}	or $refa->{SEEN} <=> $refb->{SEEN};}  # End bystructsub showtab{    my ($title, $table, $dosum) = @_;    my @list = sort keys %{$table};    if (@list)    {	print "\n   $title:\n";	my $item;	my $sum = 0;	foreach $item (@list)	{	    my $cnt = $table->{$item};	    $sum += $cnt;	    formline($subform, $item, $cnt);	    print $ACCUMULATOR, "\n";	    $ACCUMULATOR = '';	}	if ($dosum and @list > 1)	{	    print  "                            =====\n";	    formline($subform, '', $sum);	    print $ACCUMULATOR, "\n";	    $ACCUMULATOR = '';	}    }}  # End showtab# Tell Emacs that this is really a perl script# Local Variables:# mode:perl# End:

⌨️ 快捷键说明

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