计算XML节点PHP

时间:2014-10-05 17:12:49

标签: php xml count

我非常喜欢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>

我如何计算&#34; ALL&#34;的网络总数?拥有服务器Alpha的用户。

感谢您的帮助!

*更新* 请将删除的=部分添加到标记时,它是否可以忽略,例如:

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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);

答案 2 :(得分:0)

使用DomDocument,它只会是:

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

我确信它在simplexml中是一样的但我从不使用那个lib。

第二部分是:

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