Переполнение стека в подсчетах узлов XML

Я совершенно новый XML в PHP, и надеялся, что вы, умные люди, сможете мне помочь. Допустим, у меня есть документ XML, который полон пользователей. Позвольте мне привести пример одного из пользователей:

<user name="Cajs">
<email>mail@cajs.co.uk</email>
<server>Alpha</server>
<referral>VQxwf3Wq4PS5WOqhljTDPUbA</referral>
<limit>10</limit>
<ips />
<network id="EsperNet" created="1388534400"/>
<network id="DALnet" created="1388534400"/>
<network id="Freenode" created="1388534400"/>
<network id="OnlineGamesNet" created="1388534400"/>
<network id="PonyChat" created="1388534400"/>
<network id="QuakeNet" created="1388534400"/>
<network id="Rizon" created="1388534400"/>
<network id="YourBNC" created="1388534400"/>
<network id="AthemeNet" created="1406458342"/>
</user>

Как бы подсчитать общее количество сетей «ВСЕХ» пользователей, у которых есть сервер Альфа.

Спасибо за помощь!

* ОБНОВИТЬ *
Пожалуйста, возможно ли это, если часть удаленного = добавлена ​​в тег, который игнорируется, пример ниже:

0

Решение

Вы можете решить это с помощью XPath:

$xml = simplexml_load_string($xml);

$results = array();

foreach($xml->xpath('//user[server[.="Alpha"]]') as $user) {
$results[] = array(
'name'          => (string)$user->attributes()->name,
'network_count' => $user->network->count()
);
}

var_dump($results);
0

Другие решения

$xml = simplexml_load_string($xmlString);
$countUsers = 0;
for( $i = 0; $i < $xml->count(); $i++ ) {
if( $xml->user[$i]->server == 'Alpha' )
$countUsers++;
}

var_dump($countUsers);
0

С DomDocument это будет просто:

$xpath->query('//user[server[text()="Alpha"]]/network')->length;

Я уверен, что то же самое в Simplexml, но я никогда не использую эту библиотеку.

Для второй части это:

$xpath->query('//user[not(@removed) and server[text()="Alpha"]]/network')->length;
0