我正在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;