Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, ao consumir um Web Service tenho o seguinte retorno:
<soap:Envelope>
<soap:Body>
<ObterCadastro_SResponse>
<ObterCadastro_SResult>
<ISBN>8508043872</ISBN>
<CodBarras>9788508043873</CodBarras>
<Titulo>Titulo do livro</Titulo>
</ObterCadastro_SResult>
</ObterCadastro_SResponse>
</soap:Body>
</soap:Envelope>
Como eu faço para pegar os valores de ISBN, CodBarras e Titulo? :mellow:
Tentei com SimpleXML, me baseando nos exemplos ( http://br.php.net/manual/pt_BR/simplexml.examples.php ), mas não consegui...
Alguém sabe como posso fazer isso?
Olá Andrey, o fato de não ter um namespace é um problema do Web Service ou é algo que podemos resolver "do lado de cá"? E por não ter esse namespace, o que isso implica? :mellow:
É um problema do webservice, se a resposta retornada utiliza um namespace, normalmente você tem que registrar esse namespace para navegar entre as tags, mas esse namespace não foi definido no elemento raiz, se não quiser ficar 'escondendo' os erros, faça assim:
libxml_use_internal_errors( true );
$DOMDocument = new DOMDocument( '1.0' , 'utf-8' );
$DOMDocument->loadXML( $RetornoSOAP );
echo $DOMDocument->getElementsByTagName( 'ISBN' )->item( 0 )->nodeValue;
http://php.net/manual/en/function.libxml-use-internal-errors.php
libxml_use_internal_errors() allows you to disable standard libxml errors and enable user error handling
Um exemplo do formato do SOAP Envelope seria, http://en.wikipedia.org/wiki/SOAP#Example_message
POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 299
SOAPAction: "http://www.w3.org/2003/05/soap-envelope"
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header>
</soap:Header>
<soap:Body>
<m:GetStockPrice xmlns:m="http://www.example.org/stock">
<m:StockName>IBM</m:StockName>
</m:GetStockPrice>
</soap:Body>
</soap:Envelope>
Perceba que é definido um namespace pra 'soap'
Comprrendi... Mas o XML que está retornando do WS não está errado não, observei agora e ele está lá, é que o exemplo que coloquei no primeiro post foi copiado diretamente do browser e o início do XML é exibido apenas no código... :assobiando:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<ObterCadastro_SResponse ...
Obrigado!
<?php
$RetornoSOAP = <<<RetornoSoap
<soap:Envelope>
<soap:Body>
<ObterCadastro_SResponse>
<ObterCadastro_SResult>
Saída:
8508043872
Estou ocultando os erros, porque não tem um namespace definido para 'soap'