Я совершенно новый XML в PHP, и надеялся, что вы, умные люди, сможете мне помочь. Допустим, у меня есть документ XML, который полон пользователей. Позвольте мне привести пример одного из пользователей:
<user name="Cajs">
<email>[email protected]</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>
Как бы подсчитать общее количество сетей «ВСЕХ» пользователей, у которых есть сервер Альфа.
Спасибо за помощь!
* ОБНОВИТЬ *
Пожалуйста, возможно ли это, если часть удаленного = добавлена в тег, который игнорируется, пример ниже:
Вы можете решить это с помощью 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);
$xml = simplexml_load_string($xmlString);
$countUsers = 0;
for( $i = 0; $i < $xml->count(); $i++ ) {
if( $xml->user[$i]->server == 'Alpha' )
$countUsers++;
}
var_dump($countUsers);
С DomDocument это будет просто:
$xpath->query('//user[server[text()="Alpha"]]/network')->length;
Я уверен, что то же самое в Simplexml, но я никогда не использую эту библиотеку.
Для второй части это:
$xpath->query('//user[not(@removed) and server[text()="Alpha"]]/network')->length;