parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

$caller и рекурсия

Givi 21.04.2003 09:56

Идея следующая: метод-цикл, который пробегает xml-документ, по всем узлам, возвращая значение каждого узла переменной вызвавшего метода. Проблема в том, что когда метод-цикл вызывается рекурсивно, он соответственно и значения текущего узла присваивает переменной вызывающего метода, то есть своей собственной, только с "верхнего уровня" рекурсии. Таким образом рабочая переменная основного метода, инициализирующего цикл, всегда имеет значение самого первого узла дерева, что нас совершенно не устраивает. Как изменять эту переменную с любого уровня рекурсии?
$self.xDoc[^load::[/structure.xml]]
@test[][xNode]
<ul>
^loop[xNode;0]{
	<li>^xNode.getAttribute[name]</li>
}
</ul>

---

@loop[name;node;code][nodeList;i;n]
^if(!$node){
	$node[^xDoc.selectSingle[//root]]
}
$caller.$name[$node]
^if($node is 'xnode'){$code}
^if(^node.hasChildNodes[]){
	$nodeList[^node.select[*]]
	$n($nodeList-1)
	^for[i](0;$n){
		$node[$nodeList.$i]
		^loop[$name;$node]{$code}
	}
}