# A little RSS Browser # based on Richard Suchenwirth's XML Browser package require http package require BWidget package require tdom proc recurseInsert {w node parent} { set name [$node nodeName] if {$name=="#text" || $name=="cdata"} { set text [$node nodeValue] set fill black set icon file } else { set text <$name foreach att [$node attributes] { catch {append text " $att=\"[$node getAttribute $att]\""} } append text > set fill blue set icon folder } $w insert end $parent $node -text $text -fill $fill -image [Bitmap::get $icon] -helptext $::name foreach child [$node childNodes] {recurseInsert $w $child $node} } Tree .t -yscrollcommand ".y set" scrollbar .y -ori vert -command ".t yview" pack .y -side right -fill y pack .t -side right -fill both -expand 1 #package require autoproxy ;# add if needed for proxy support #autoproxy::init proc fetch {url} { set res [http::data [set tok [http::geturl $url]]] http::cleanup $tok return $res } # add more if desired set site {http://wiki.tcl.tk/rss.xml http://rss.slashdot.org/Slashdot/slashdot http://rss.news.yahoo.com/rss/topstories} foreach name $site { set xml [fetch $name] dom parse $xml doc $doc documentElement root recurseInsert .t $root root }
MHo 2008-06-26: A Syntax error in startup script... appears. ActiveTcl 8.4.18 on w2k.LV I made a couple of URL changes in the rss feeds, put the code into a file, and ran it against sparc solaris activetcl 8.5.2 and get:
$ /tmp/rss.tk node "domNode141870" already exists while executing "Tree::insert .t end root domNode141870 -text {<rss version="2.0">} -fill blue -image image1 -helptext http://rss.news.yahoo.com/rss/topstories" ("eval" body line 1) invoked from within "eval [linsert $args 0 Tree::$cmd .t]" (procedure ".t" line 1) invoked from within "$w insert end $parent $node -text $text -fill $fill -image [Bitmap::get $icon] -helptext $::name" (procedure "recurseInsert" line 16) invoked from within "recurseInsert .t $root root" ("foreach" body line 6) invoked from within "foreach name $site { puts "name = $name" set xml [fetch $name] dom parse $xml doc $doc documentElement root recurseInsert .t $root root }" (file "/tmp/rss.tk" line 46)