Рекурсивный вызов функций в Parser
Виталий 25.03.2004 19:05
Может кто-нибудь сталкивался с этим:
Кажется парсер после рекурсивного вызова функции не возвращает
управление в предыдущий вызов этой-же функции.
По крайней мере у меня :(
Может я за деревьями не вижу леса ? Поделитесь, пожалуйста, своим
видением этой ситуации.
А задача такая:
нужно из xml-документа выделить все аттрибуты name элемента item,
причем код должен знать, что, например, элемент item с аттрибутом
name="Item 2.2" является родительским относительно элемента item
с аттрибутом name="Item 2.2.1"
Может есть и другой путь как этого добиться?
Я не хочу примеров решения "на халяву" - действительно уперся
в стену !
Спасибо!
Вот код на парсере:
@main[]
$document[^xdoc::load[menu.xml]]
$menu_element[$document.documentElement]
$elements_hash[$menu_element.childNodes]
#^elements_hash._count[]
^for[i](0;$elements_hash-1){
$element[$elements_hash.$i]
^if($element.nodeName ne "#text"){
^if($element.nodeName ne "sub"){
^processItem[$element]
}{
^processSubItem[$element]
}
}
}
@processItem[element]
^element.selectString[string(@name)]
@processSubItem[element]
$sub_hash[$element.childNodes]
^for[z](0;$sub_hash-1){
$sub_element[$sub_hash.$z]
^if($sub_element.nodeName ne "#text"){
^if($sub_element.nodeName ne "sub"){
z: $z ^processItem[$sub_element]
}{
z: $z ^self.processSubItem[$sub_element]
}
}
}
... а вот xml-документ:
<menu>
<item name="Item 1" ref="/"/>
<item name="Item 2" ref="/"/>
<sub>
<item name="Item 2.1" ref="/"/>
<item name="Item 2.2" ref="/"/>
<sub>
<item name="Item 2.2.1" ref="/"/>
<item name="Item 2.2.2" ref="/"/>
<item name="Item 2.2.3" ref="/"/>
</sub>
<item name="Item 2.3" ref="/"/>
</sub>
<item name="Item 3" ref="/"/>
</menu>
- Рекурсивный вызов функций в Parser, Виталий 25.03.2004 19:05