#!/usr/bin/env tclsh
package require tdom
#--- Callbacks for certain parser events
proc el {name attlist} {
global g
incr ::nEl
incr ::nAtt [llength $attlist]
inc g($name)
}
proc ch data {
incr ::nChar [string length $data]
}
proc pi {target data} {
incr ::nPi
}
proc inc {varName {increment 1}} {
upvar 1 $varName var
if {![info exists var]} {set var 0}
incr var $increment
}
#--- "main" loop
if ![llength $argv] {puts "usage: $argv0 file..."}
foreach file $argv {
foreach i {nEl nAtt nChar nPi} {set $i 0} ;# reset counters
set p [expat -elementstartcommand el \
-characterdatacommand ch \
-processinginstructioncommand pi ]
if [catch {$p parsefile $file} res] {
puts "error:$res"
} else {
puts "$file:\n$nEl elements, $nAtt attributes, $nChar characters,\
$nPi processing instructions"
foreach name [lsort [array names g]] {
puts [format %-20s%7d $name $g($name)]
}
}
$p free
}Arts and crafts of Tcl-Tk programming[ Category Application | Category XML ]