计算XML节点PHP


Count XML Nodes PHP

我正在PHP中尝试新的XML,希望你们这些聪明的人能帮助我。假设我有一个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>

我该如何计算拥有Alpha服务器的"所有"用户的网络总量。

谢谢你的帮助!

*更新*请注意,当removed=部分添加到标签时,它是否可能被忽略,例如:

您可以借助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中也是如此,但我从未使用过该lib。

第二部分是:

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