Posted to tcl by jdc at Wed Jun 06 08:34:02 GMT 2007view raw
- 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