Posted to tcl by jdc at Wed Jun 06 08:34:02 GMT 2007view pretty

package require htmlparse

set htmltxt "<table><tr><td>1</td><td>2</td></tr><tr><td><table><tr><td>1-1</td><td>2-2</td></tr><tr><td><b>3-3</b></td><td>4-4</td></tr></table></td><td>4</td></tr></table>"

set tid 0

proc my_callback { tag slash param text } { 
    global tid tdta trdta tddta
    puts "$tid: $tag $slash $param $text"
    switch -exact -- $tag {
	table {
	    if { $slash eq "/" } {
		if { $tid > 1 } { 
		    lappend tddta([expr {$tid-1}]) $tdta($tid)
		}
		incr tid -1
	    } else {
		incr tid 1
		set tdta($tid) [list]
		set trdta($tid) [list]
		set tddta($tid) [list]
	    }
	}
	tr {
	    if { $slash eq "/" } {
		lappend tdta($tid) $trdta($tid)
		set trdta($tid) [list]
	    }
	}
	td {
	    if { $slash eq "/" } { 
		lappend trdta($tid) $tddta($tid)
		set tddta($tid) [list]
	    } else {
		if { [string length $text] } { 
		    lappend tddta($tid) $text
		}
	    }
	}
	default {
	    if { $slash ne "/" } { 
		if { [string length $text] } { 
		    lappend tddta($tid) $text
		}
	    }
	}
    }
}

htmlparse::parse -cmd my_callback $htmltxt

parray tdta