在PHP中迭代一系列XML节点的正确方法

时间:2013-09-05 19:17:46

标签: php xml magento

这是迭代这些XML片段的正确方法吗?

你好。

我有一个网络服务,可以让我有一些客户进行整合。

如果werbservice只返回一个客户端,结果如下:

 <ClientsToIntegrateResult>
    <Client>
       <Id>1</Id>
       <Name>John</Name>
    </Client>
 </ClientsToIntegrateResult>

如果webService返回多个客户端,结果如下:

 <ClientsToIntegrateResult>
    <Client>
       <Id>1</Id>
       <Name>John</Name>
    </Client>
    <Client>
       <Id>2</Id>
       <Name>Peter</Name>
    </Client>   
 </ClientsToIntegrateResult>

我有这段PHP代码来读取webService的结果,其中$ myWSResponse是我的webService的实例:

 $clients = $myWSResponse->ClientsToIntegrateResult;

 foreach ($clients->Client as $client ) 
 {
    print_r($client); //Print the client node and its properties if more than one client, and prints each property of client node if only one client.
    print_r($client->Id); //Give me error if only one client, because Id will not exist.
 }

我的问题是当webservice只返回一个客户端时,我的代码不起作用。 当我有多个客户端时,我的foreach正常工作,因为我希望,因为$clients->Client将是一个数组。 但是当webService只返回一个客户端时,$clients->Client将成为节点本身,我的代码将抛出错误。

我能做些什么来解决它?

我不熟悉PHP开发,但使用.NET开发。任何帮助都是宝贵的。

1 个答案:

答案 0 :(得分:0)

if(count($clients->Client) > 1){

foreach ($clients->Client as $client ) 
 {
    print_r($client); //Print the client node and its properties if more than one client, and prints each property of client node if only one client.
    print_r($client->Id); //Give me error if only one client, because Id will not exist.
 }

}else {
echo $clients->Client['id']; //and other child attributes
}