This past weekend I started writing some procedures that parse an RSS feed. The code is experimental and has nothing to do with OpenACS yet:
proc get_node {node_id element parent} {
set element [ns_xml node name $element]
set parent [ns_xml node name $parent]
set content [ns_xml node getcontent $node_id]
if { $element == "description" && $parent == "channel" } {
ns_write "$content ($element - $parent)"
}
}
proc get_tree {children element parent level} {
upvar $parent p
foreach child_id $children {
get_node $child_id $element $p($level)
set new_children [ns_xml node children $child_id]
if { [llength $new_children] > 0 } {
set level [expr $level + 1]
set p($level) $element
set element $child_id
get_tree $new_children $element $p($level) $level
}
}
}
proc get_doc {doc_id} {
set level 2
set parent($level) [list [ns_xml doc root $doc_id]]
set elements [ns_xml node children $parent($level)]
for {set i 0} {$i < [llength $elements]} {incr i} {
set children [ns_xml node children [lindex $elements $i]]
get_tree $children [lindex $elements $i] $parent($level) $level
}
}
I get this error, though:
can't read "p(2)": no such variable
while executing
"get_node $child_id $element $p($level)"
(procedure "get_tree" line 4)
In other words, the array $parents isn't passed correctly.
Perhaps I pass it incorrectly with:
get_tree $children [lindex $elements $i] $parent($level) $levelOr perhaps it's because of the
get_tree procedure being recursive and so the array exists on a higher level?
Can anyone help out?
/Simon
Request notifications