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

  1. package require htmlparse
  2.  
  3. 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>"
  4.  
  5. set tid 0
  6.  
  7. proc my_callback { tag slash param text } {
  8. global tid tdta trdta tddta
  9. puts "$tid: $tag $slash $param $text"
  10. switch -exact -- $tag {
  11. table {
  12. if { $slash eq "/" } {
  13. if { $tid > 1 } {
  14. lappend tddta([expr {$tid-1}]) $tdta($tid)
  15. }
  16. incr tid -1
  17. } else {
  18. incr tid 1
  19. set tdta($tid) [list]
  20. set trdta($tid) [list]
  21. set tddta($tid) [list]
  22. }
  23. }
  24. tr {
  25. if { $slash eq "/" } {
  26. lappend tdta($tid) $trdta($tid)
  27. set trdta($tid) [list]
  28. }
  29. }
  30. td {
  31. if { $slash eq "/" } {
  32. lappend trdta($tid) $tddta($tid)
  33. set tddta($tid) [list]
  34. } else {
  35. if { [string length $text] } {
  36. lappend tddta($tid) $text
  37. }
  38. }
  39. }
  40. default {
  41. if { $slash ne "/" } {
  42. if { [string length $text] } {
  43. lappend tddta($tid) $text
  44. }
  45. }
  46. }
  47. }
  48. }
  49.  
  50. htmlparse::parse -cmd my_callback $htmltxt
  51.  
  52. parray tdta