This is a kind of answer. Actually I gave up and went to a solution based on SimpleXML. Really simple and very few code. Eventually somebody will come across this question and my "solution" might be a way for him, too. So I'll include it here:
// data represented as xml
$xmlstring = <<<XML
<orgtree>
<level number="1">
<unit label="Universe" code="1111">
<level number="2">
<unit label="Asia" code="2000"></unit>
<level number="3">
<unit label="Hongkong" code="3203"></unit>
<level number="4">
<unit label="Greater Area" code="2081"></unit>
<unit label="Downtown" code="2041"></unit>
</level>
</level>
</unit>
<unit label="Africa" code="6201"></unit>
<unit label="North America" code="321"></unit>
</level>
</unit>
</level>
</orgtree>
XML;
$xml = simplexml_load_string($xmlstring);
// use xpath to select part of xml
foreach ($xml->xpath('//unit[@code="2000"]') as $parentUnit)
{
$subtree = $parentUnit->level;
foreach ($subtree->unit as $unit) {
var_dump($unit["label"]);
}
}