dc 14/04/06
Un exemple d'utilisation de struct::tree et de htmlparse de la TclLib, et du widget Tree de BWidget.
On parse une page html unepage.html, on affiche l'arbre de la syntaxe html et est renvoyé en sortie standard les contenus de toutes les balises a.
package require struct::tree
package require htmlparse
package require BWidget
set f [open unepage.html]
set codeHTML [read $f]
close $f
struct::tree arbre
htmlparse::2tree $codeHTML arbre
pack [Tree .arbre] -expand 1 -fill both
pack [label .l] -fill x
proc creeBranche {} {
if {[string equal $::var "root"]} {return}
.arbre insert end [arbre parent $::var] $::var\
-text [arbre get $::var type]
}
arbre walk root var creeBranche
proc afficheContenu {noeud} {
.l configure -text [arbre get $noeud data]
}
.arbre bindText <1> afficheContenu
proc baliseA {a n} {
if {[string equal [$a get $n type] "a"]} {return 1}
return 0
}
proc afficheBaliseA {} {
foreach noeud [arbre descendants root filter baliseA] {
lappend listeA [arbre get $noeud data]
}
return $listeA
}
puts [afficheBaliseA]le parcours de l'arbre arbre walk root var creeBranche peut aussi se faire avec la méthode walkproc (accessible selon les versions de struct::tree)
proc creeBranche2 {a n action} {
if {[string equal $n "root"]} {return}
.$a insert end [$a parent $n] $n\
-text [$a get $n type]
}
arbre walkproc root creeBranche2dc 30/04/06 Un autre exemple : on utilise cette fois-ci le package tdom pour parser du xml renvoyé sous forme d'une liste puis on crée un arbre compatible avec struct::tree :
package require tdom
package require struct::tree
set f [open un_fil_rss.xml]
set xml [read $f]
close $f
dom parse $xml doc
$doc documentElement root
struct::tree arbre
set compteur -1
proc parcours_rec {liste indexParent} {
foreach {node attr enfants} $liste {
set n node[incr ::compteur]
lappend ::arbreS $n $indexParent [list $node $attr]
parcours_rec [join $enfants] [expr {[llength $::arbreS]-3}]
}
}
parcours_rec [$root asList] 0
set arbreS [lreplace $arbreS 0 1 root {}]
arbre deserialize $arbreSPour créer un lecteur RSS, on peut plus simplement utiliser les possibilités du package tdom qui permet de parcourir son propre arbre. On peut par exemple aller voir sur le wikit anglophone ici [1].
ulis Juste une petite rectification : le Tcler's Wiki est un wiki (et peut-être pas un wikit qui est une implémentation particulière de wiki).
Kroc : Le Tcler's Wiki est un wiki et un wikit, comme ici.