parser

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

 

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

Людии Хелп

vision 01.01.2006 12:17

Уже три дня мучаюсьникак то что надо не выходит.

XML:
<data>
<level1 id="level1">
        <level2 id="level2" parent="level1"/>
        <level2 id="level2" parent="level1">
                <level3 id="level3" parent="level2">
                        <level4 id="level4" parent="level3"/>
                </level3>
                <level3 id="level3" parent="level2"/>
        </level2>
</level1>
</data>
Вот что смог придумать, сам понимаю что чушь но как сделать правильнее не пойму:
@xml[]
$xml_file[^xdoc::load[/data.xml]]
^get_tree[^xml_file.selectSingle[data]]

@get_tree[tree]
$tree_list[$tree.childNodes]
^for[i](0;$tree_list-1){
    $tree_node[$tree_list.$i]
    ^if($tree_node.nodeType==1){+ $tree_node.nodeName / $tree_node.nodeType<br />}
    ^if(^tree_node.hasChildNodes[]){^get_child[$tree_node]}
}

@get_child[node]
$node_list[$node.childNodes]
^for[a](0;$node_list-1){
    $this_node[$node_list.$a]
    ^if($this_node.nodeType==1){++ $this_node.nodeName / $this_node.nodeType<br> }
    ^if(^this_node.hasChildNodes[]){+^get_child[$this_node]}
}
В результате получаем:

+ level1 / 1
++ level2 / 1
++ level2 / 1
+ ++ level3 / 1
+ ++ level4 / 1

Как видно зарываемся в одну из веток и дальше не идёт.

Подскажите как правильно сделать рекурсию по XML дереву