Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alex Oliveira Dos Santos

Capturar resultado de objeto xml de webservice

Recommended Posts

Tentei vários códigos porem não consegui extrair os dados individuais de um retorno de webservice que recebo uma string contendo um objeto xml

segue abaixo códigos utilizados e retorno

<?php

$client = new SoapClient('http://xxxWebService.asmx?wsdl');
$function = 'getEstoque';
$arguments= array('getEstoque' => array(
'emp_id'=>"4",
'grupo'=>"",
'segmento'=>"",
'produto_id'=>"20",
'cor_id'=>"",
'tamanho'=>""
));
$options = array('location' => 'http://xxxWebService.asmx?wsdl');
$result = $client->__soapCall($function, $arguments, $options);
echo'<pre>';

var_dump($result);//retorna um object(stdClass)#2 (1) {["getEstoqueResult"]=>string(2717)
echo'</pre>';


?>

retorno recebido que preciso capturar os dados individualmente

<pre>object(stdClass)#2 (1) {
  ["getEstoqueResult"]=>
  string(2717) "<NewDataSet>
  <produto>
    <produto_id>20</produto_id>
    <produto_tamanho>P</produto_tamanho>
    <cor_id>1</cor_id>
    <qtd_estoque>200</qtd_estoque>
    <cor>DIVERSAS</cor>
  </produto>
  <produto>
    <produto_id>20</produto_id>
    <produto_tamanho>PP</produto_tamanho>
    <cor_id>1</cor_id>
    <qtd_estoque>200</qtd_estoque>
    <cor>DIVERSAS</cor>
  </produto>
  <produto>
    <produto_id>20</produto_id>
    <produto_tamanho>G</produto_tamanho>
    <cor_id>1</cor_id>
    <qtd_estoque>210</qtd_estoque>
    <cor>DIVERSAS</cor>
  </produto>
  <produto>
    <produto_id>20</produto_id>
    <produto_tamanho>GG</produto_tamanho>
    <cor_id>1</cor_id>
    <qtd_estoque>200</qtd_estoque>
    <cor>DIVERSAS</cor>
  </produto>
  <produto>
    <produto_id>20</produto_id>
    <produto_tamanho>M</produto_tamanho>
    <cor_id>1</cor_id>
    <qtd_estoque>200</qtd_estoque>
    <cor>DIVERSAS</cor>
  </produto>
  <produto>
    <produto_id>20</produto_id>
    <produto_tamanho>G</produto_tamanho>
    <cor_id>2</cor_id>
    <qtd_estoque>200</qtd_estoque>
    <cor>PRETA</cor>
  </produto>
  <produto>
    <produto_id>20</produto_id>
    <produto_tamanho>GG</produto_tamanho>
    <cor_id>2</cor_id>
    <qtd_estoque>200</qtd_estoque>
    <cor>PRETA</cor>
  </produto>
  <produto>
    <produto_id>20</produto_id>
    <produto_tamanho>M</produto_tamanho>
    <cor_id>2</cor_id>
    <qtd_estoque>200</qtd_estoque>
    <cor>PRETA</cor>
  </produto>
  <produto>
    <produto_id>20</produto_id>
    <produto_tamanho>P</produto_tamanho>
    <cor_id>2</cor_id>
    <qtd_estoque>200</qtd_estoque>
    <cor>PRETA</cor>
  </produto>
  <produto>
    <produto_id>20</produto_id>
    <produto_tamanho>PP</produto_tamanho>
    <cor_id>2</cor_id>
    <qtd_estoque>200</qtd_estoque>
    <cor>PRETA</cor>
  </produto>
  <produto>
    <produto_id>20</produto_id>
    <produto_tamanho>M</produto_tamanho>
    <cor_id>4</cor_id>
    <qtd_estoque>200</qtd_estoque>
    <cor>VERMELHO</cor>
  </produto>
  <produto>
    <produto_id>20</produto_id>
    <produto_tamanho>P</produto_tamanho>
    <cor_id>4</cor_id>
    <qtd_estoque>200</qtd_estoque>
    <cor>VERMELHO</cor>
  </produto>
  <produto>
    <produto_id>20</produto_id>
    <produto_tamanho>PP</produto_tamanho>
    <cor_id>4</cor_id>
    <qtd_estoque>200</qtd_estoque>
    <cor>VERMELHO</cor>
  </produto>
  <produto>
    <produto_id>20</produto_id>
    <produto_tamanho>G</produto_tamanho>
    <cor_id>4</cor_id>
    <qtd_estoque>200</qtd_estoque>
    <cor>VERMELHO</cor>
  </produto>
  <produto>
    <produto_id>20</produto_id>
    <produto_tamanho>GG</produto_tamanho>
    <cor_id>4</cor_id>
    <qtd_estoque>200</qtd_estoque>
    <cor>VERMELHO</cor>
  </produto>
</NewDataSet>"
}
</pre>

eu preciso pegar por exemplo, apenas o produto_id e o cor_id

Compartilhar este post


Link para o post
Compartilhar em outros sites

A forma que você recebe o retorno do WS deve ser definido no WSDL.

 

Com o uso do var_dump, é possível verificar que é retornado apenas um valor, que você pode recuperá-lo assim:

echo $result->getEstoqueResult;

Neste caso em específico, eles definiram que retornaria uma string e essa string é um XML. A partir disso, não há nada de errado com o retorno da classe SoapClient (exceto que o WS não foi bem escrito/desenvolvido).

 

A partir de agora, o que você deve fazer, é interpretar o XML. Podes olhar o seguinte link:

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.