在php中从SOAP响应获取值

在php中从SOAP响应获取值,php,soap,wsdl,soapui,soap-client,Php,Soap,Wsdl,Soapui,Soap Client,我使用soapui完美地获得了SOAP调用的SOAP响应,但是当我在php中调用相同的响应时,我无法遍历到我想要的元素(CreditId) 以下是我使用SOAP ui得到的SOAP响应: <soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"> <soap-env:Header/> <soap-env:Body> <n0:getPr

我使用soapui完美地获得了SOAP调用的SOAP响应,但是当我在php中调用相同的响应时,我无法遍历到我想要的元素(CreditId

以下是我使用SOAP ui得到的SOAP响应:

<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
   <soap-env:Header/>
   <soap-env:Body>
      <n0:getProjectCreditListResponse xmlns:n0="urn:sap-com:document:sap:soap:functions:mc-style">
         <EUserGuid>33/XIcx+3/GxWABQVoJXWA==</EUserGuid>
         <EtCurrCreditList>
            <item>
               <PhaseId/>
               <CreditcategoryDescrption>Project Information Forms</CreditcategoryDescrption>
               <CreditId>CSD1GSP1L-1000008140</CreditId>
            </item>
            <item>
               <PhaseId/>
               <CreditcategoryDescrption>Project Information Forms</CreditcategoryDescrption>
               <CreditId>CSD1GSP2L-1000008140</CreditId>
            </item>
</EtCurrCreditList>
         <EtErrorLogInfo/>
      </n0:getProjectCreditListResponse>
   </soap-env:Body>
</soap-env:Envelope>
然而,我得到了一个错误说明

警告:simplexml_load_string()要求参数1为字符串

我曾尝试将$res变量转换为字符串,但它给出了一个错误:

类stdClass的对象无法转换为字符串

但是如果我做了var\u dump($res),我会得到如下输出:

object(stdClass)[2]
  public 'EUserGuid' => string 'ß×!Ì~ßñ±X�PV‚WX' (length=16)
  public 'EtCurrCreditList' => 
    object(stdClass)[3]
  public 'EtErrorLogInfo' => 
    object(stdClass)[4]
为什么代码不发送到EtCurrCreditList的子节点,这样我就可以处理它以获得所需的值。-已解决

最终输出:

stdClass Object
(
    [EUserGuid] => ß×!Ì~ßñ±XPV‚WX
    [EtCurrCreditList] => stdClass Object
        (
            [item] => Array
                (
                    [0] => stdClass Object
                        (
                            [PhaseId] => 
                            [PhaseDescription] => 
                            [CreditcategoryId] => CSD1GSL-1000008140
                            [CreditcategoryDescrption] => Project Information Forms
                            [CreditId] => CSD1GSP1L-1000008140
                         )
            [1] => stdClass Object
                        (
                            [PhaseId] => 
                            [PhaseDescription] => 
                            [CreditcategoryId] => CSD1GSL-1000008140
                            [CreditcategoryDescrption] => Project Information Forms
                            [CreditId] => CSD1GSP2L-1000008140
            )
            [2] => stdClass Object
                        (
                            [PhaseId] => 
                            [PhaseDescription] => 
                            [CreditcategoryId] => CSD1GSL-1000008140
                            [CreditcategoryDescrption] => Project Information Forms
                            [CreditId] => CSD1GSP3L-1000008140
            )
        )

        )

    [EtErrorLogInfo] => stdClass Object
        (
        )
使用
echo“
$res=stdClass Object ( [EUserGuid] => ß×!Ì~ßñ±XPV‚WX [EtCurrCreditList] => stdClass Object ( ) [EtErrorLogInfo] => stdClass Object ( ) )
现在使用

$res->EUserGuid=$something;

foreach($res->EtCurrCreditList->item as $eachItem)
{
    $eachItem->PhaseId=$your_ wish;
    $eachItem->PhaseDescription==$your_ wish;
    $eachItem->CreditcategoryId==$your_ wish;
    $eachItem->CreditcategoryDescrption==$your_ wish;
    $eachItem->CreditId=$your_ wish;
}
同样适用于
EtCurrCreditList
EtErrorLogInfo
以及嵌套循环(如果这些对象包含任何内容)

根据新输出进行更新。 你可以这样迭代它


并且可以忽略
EtErrorLogInfo

试试这个。这可能会解决您的查询嗨谢谢您的回复,我只遵循这些步骤,但问题是simplexml\u load\u string函数没有将$res识别为字符串,所以我如何首先解决这个问题。我还尝试复制xml并将其用作输入,然后执行上述代码时,它会给出所有的creditID,但不是通过使用$res作为输入。感谢@rahulRaj的注释。我这样做了,我得到的输出是:
stdClass对象([EUserGuid]=>ß×Ì~ßñ±XPV∗WX[EtCurrCreditList]=>stdClass对象()[EtErrorLogInfo]=>stdClass对象())
因此它似乎没有遍历EtCurrCreditList的节点,您能给出具体的原因吗。再次感谢您的回复,我尝试使用代码获取CreditID并运行以下命令:
foreach($res->EtCurrCreditList as$val1){foreach($val1->item as$val2){foreach($val2->CreditId as$val){print_r($val);}}
现在,我没有得到任何输出,只是在空白屏幕上,,,没有显示任何错误或任何内容。关于如何获取creditId的任何帮助..从响应中,您可以看到只有EUserGuid的值,其余都是空的,是的,您是对的,,,我没有得到EtCurrCreditList的任何值,但是当我使用wsdl在soapUI中检查响应时,我也可以在EtCurrCreditList中看到值。为什么SoapClient不提供这些值?有什么线索吗?您能提供wsdl url和您在数组中提供的一组输入值(输入参数)吗
foreach($res->EUserGuid as $data)
       {
         //Your logic 
       }
$res->EUserGuid=$something;

foreach($res->EtCurrCreditList->item as $eachItem)
{
    $eachItem->PhaseId=$your_ wish;
    $eachItem->PhaseDescription==$your_ wish;
    $eachItem->CreditcategoryId==$your_ wish;
    $eachItem->CreditcategoryDescrption==$your_ wish;
    $eachItem->CreditId=$your_ wish;
}