Jump to content

Question

Boa tarde, Pessoal.

 

Estou com uma dificuldade tremenda para entender as informações que recebo no retorno de um serviço.

 

Estou verificando que estou recebendo um xml dentro do outro... isso é correto?

 

Exemplo:

 

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <POSFINRESPONSE xmlns="http://187.94.62.86:6621/">
         <POSFINRESULT><![CDATA[<?xml version="1.0" encoding="ISO-8859-1"?><posfin><TITULO><E1_NUM>000058711</E1_NUM><E1_EMISSAO>20160901</E1_EMISSAO><E1_VENCREA>20170316</E1_VENCREA><E1_VALOR>622.63</E1_VALOR><E1_JUROS>0</E1_JUROS><E1_MULTA>0</E1_MULTA><E1_NOMCLI>AGF JABOATAO CENTRO</E1_NOMCLI><A1_CGC>41024050000196</A1_CGC><E1_BAIXA></E1_BAIXA><RECNO>230968</RECNO></TITULO><TITULO><E1_NUM>000058712</E1_NUM><E1_EMISSAO>20160901</E1_EMISSAO><E1_VENCREA>20170417</E1_VENCREA><E1_VALOR>622.63</E1_VALOR><E1_JUROS>0</E1_JUROS><E1_MULTA>0</E1_MULTA><E1_NOMCLI>AGF JABOATAO CENTRO</E1_NOMCLI><A1_CGC>41024050000196</A1_CGC><E1_BAIXA></E1_BAIXA><RECNO>230969</RECNO></TITULO><TITULO><E1_NUM>000058713</E1_NUM><E1_EMISSAO>20160901</E1_EMISSAO><E1_VENCREA>20170516</E1_VENCREA><E1_VALOR>622.63</E1_VALOR><E1_JUROS>0</E1_JUROS><E1_MULTA>0</E1_MULTA><E1_NOMCLI>AGF JABOATAO CENTRO</E1_NOMCLI><A1_CGC>41024050000196</A1_CGC><E1_BAIXA></E1_BAIXA><RECNO>230970</RECNO></TITULO><TITULO><E1_NUM>000058714</E1_NUM><E1_EMISSAO>20160901</E1_EMISSAO><E1_VENCREA>20170616</E1_VENCREA><E1_VALOR>622.63</E1_VALOR><E1_JUROS>0</E1_JUROS><E1_MULTA>0</E1_MULTA><E1_NOMCLI>AGF JABOATAO CENTRO</E1_NOMCLI><A1_CGC>41024050000196</A1_CGC><E1_BAIXA></E1_BAIXA><RECNO>230971</RECNO></TITULO><TITULO><E1_NUM>000058715</E1_NUM><E1_EMISSAO>20160901</E1_EMISSAO><E1_VENCREA>20170717</E1_VENCREA><E1_VALOR>622.63</E1_VALOR><E1_JUROS>0</E1_JUROS><E1_MULTA>0</E1_MULTA><E1_NOMCLI>AGF JABOATAO CENTRO</E1_NOMCLI><A1_CGC>41024050000196</A1_CGC><E1_BAIXA></E1_BAIXA><RECNO>230972</RECNO></TITULO><TITULO><E1_NUM>000058716</E1_NUM><E1_EMISSAO>20160901</E1_EMISSAO><E1_VENCREA>20170816</E1_VENCREA><E1_VALOR>622.63</E1_VALOR><E1_JUROS>0</E1_JUROS><E1_MULTA>0</E1_MULTA><E1_NOMCLI>AGF JABOATAO CENTRO</E1_NOMCLI><A1_CGC>41024050000196</A1_CGC><E1_BAIXA></E1_BAIXA><RECNO>230973</RECNO></TITULO><TITULO><E1_NUM>000058717</E1_NUM><E1_EMISSAO>20160901</E1_EMISSAO><E1_VENCREA>20170918</E1_VENCREA><E1_VALOR>622.63</E1_VALOR><E1_JUROS>0</E1_JUROS><E1_MULTA>0</E1_MULTA><E1_NOMCLI>AGF JABOATAO CENTRO</E1_NOMCLI><A1_CGC>41024050000196</A1_CGC><E1_BAIXA></E1_BAIXA><RECNO>230974</RECNO></TITULO></posfin>]]></POSFINRESULT>
      </POSFINRESPONSE>
   </soap:Body>
</soap:Envelope>

 

Edited by João Batista Neto
Adicionar marcação de código

Share this post


Link to post
Share on other sites

5 answers to this question

Recommended Posts

  • 0
10 minutos atrás, cleytonSouza disse:

Estou verificando que estou recebendo um xml dentro do outro... isso é correto?

 

Se o "isso é correto" for quanto a estar recebendo um XML, então sim, POSFINRESULT é um bloco CDATA com um XML; isso é um fato.

 

Agora, se o "isso é correto" for quanto ao serviço te enviar um XML, aí a conversa é outra. SOAP significa Simple Object Access Protocol, com bastante ênfase ao Object. Quando o serviço te cospe um XML dessa forma, sei lá, mas me parece que não compreendem o protocolo, precisavam fornecer acesso externo e SOAP foi a forma com menor trabalho - a.k.a. nas coxas - que a ferramenta que usam oferecia.

 

É correto? Não gosto; mas é possível.

Share this post


Link to post
Share on other sites
  • 0

Nesse caso, a sugestão é que você leia-o com DOM.  Faça a chamada ao serviço SOAP normalmente; quando a resposta chegar, pegue o XML do POSFINRESULT e leia-o com DOM.

 

DOM.getElementsByTagName para obter um DOMNodeList com todos os nós TITULO. Aí você itera esse DOMNodeList para obter cada um dos Node TITULO; com o Node TITULO, você pega seus Node.childNodes e você terá cada um dos Nodes filhos de Título e poderá pegar seus valores.

 

 

:smile:

 

Share this post


Link to post
Share on other sites
  • 0

Estou tentando seguir o passo a passo descrito pelo @João Batista Neto ... e deparei com o seguinte erro ao tentar exibir as informações contida no XML:

 

Trying to get property of non-object 

Segue código abaixo:  Onde estou errando que não consigo capturar os valores contido no XML?

 

ini_set ( 'soap.wsdl_cache_enable' , 0 ); ini_set ( 'soap.wsdl_cache_ttl' , 0 );

$client=new SoapClient('http://187.94.62.86:6621/ws/WS_TITULOS.apw?WSDL');

if ($client === Null) {

 throw new CHttpException(404, 'The requested page does not exist');
 return $client;

}
$object = array('CTOKEN' => 'intttpodwsfr0t73!', 'CCLIENTE' => 00111111111111, 'CTP' => 'B', 'CDATADE' => 20170101, 'CDATAATE' => 20171231);

          $result = $client->__soapCall("POSFIN",  array('POSFINRESULT' => $object));
          /* 2 */
          
          /* 3*/
          $doc = new DOMDocument; #ok         
            #Pegar o XML do POSFINRESULT e leia com DOM.
          $doc->loadXML($result->POSFINRESULT); #ok
          #Através do getElementsByTagName obter um DOMNResul
         # $nodelist = $dom->getElementsByTagName('<TITULO> </TITULO>'); #ok
          $nodeList = $doc->getElementsByTagName('<TITULO></TITULO>')->item(0);

                    
          foreach ($nodeList->childNodes as $node) {
           
              if ($node->hasChildNodes()) {
                 $childs = $node->childNodes;

                 foreach($childs as $i) {
                  echo $i->nodeValue . "<br />";
               }

              }

          }

 

Share this post


Link to post
Share on other sites
  • 0

Tá errado; chegou a ler o link com a documentação que te passei?

 

$domNodeList = $dom->getElementsByTagName('TITULO'); //você tem que pegar o nome da tag

for ($i = 0, $t = $domNodeList->length; $i < $t; ++$i) {
    $titulo = $domNodeList->item($i); //aqui você tem um título individual
  
    $num = $titulo->getElementsByTagName('E1_NUM')->item(0); //aqui você tem o E1_NUM do título atual
    $emissao = $titulo->getElementsByTagName('E1_EMISSAO')->item(0); //aqui você tem o E1_EMISSAO do título atual
    // ...
}

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Caio Vargas
      Fala pessoa tudo tranquilo ?
      estou com um problema eu fiz um sistema de upload onde tem a marca dagua  o problema e que quando o cadastro da capa e pequena a imagem da marca dagua fica grande
      e qauando a capa e grande  a imagem da marca dagua fica pequena alguem poderia me ajudar 
    • By klasss
      Olá a todos, 

      Tenho aqui um erro parvo não estou a ver como resolver . 

      Na minha View tenho um botão que será para fazer a aprovação de documentos , que abre uma modal para fazer a confirmação : 
      O problema é que quis fazer a mesma coisa para rejeitar. 
       
      <a href="{{route('despesas.modal', $item)}}" ><i class="fas fa-check text-info mr-1"></i></a> <a href="{{route('despesas.modal2', $item)}}" ><i class="fas fa-ban text-danger mr-1"></i></a> <?php if(@$id != ""){ echo "<script>$('#modalaceitar').modal('show');</script>"; } ?> <?php if(@$id != ""){ echo "<script>$('#modalrejeitar').modal('show');</script>"; } ?> Será que consigo validar por exemplo criando um ID nos dois botões?  
       
      Obrigado!
    • By Marcos RJ
      Bom dia, boa tarde, boa noite colegas.
       
      Tenho um projeto onde conterá diversos subdomínios. Ex.:
      empresa1.site.com.br empresa2.site.com.br empresa3.site.com.br Esses subdomínios acessarão o sistema que está dentro do seguinte diretório:
      site.com.br/sistema/ Gostaria de fazer com que os subdomínios acessassem o sistema sem alterar a url, pois o objetivo é quando fizer quaisquer alterações e/ou inclusões de novos recursos, não tenhamos a necessidade de fazer isso dentro de todos os subdomínios, haja vista que serão dezenas ou até mesmo centenas de subdomínios. As minhas tentativas foram diretamente no .htaccess:
      RewriteEngine on RewriteCond %{HTTP_HOST} ^empresa1.site.com$ [OR] RewriteCond %{HTTP_HOST} ^www.empresa1.site.com$ RewriteRule ^(.*) http://www.site.com/sistema/$1?key=empresa1 [P,L] E o PHP ficou dessa forma:
       
      $diretorio = $_REQUEST["key"]; if($directory != null){    require "http://".$diretorio.".site.com.br/sistema/class/conectCass.php"; }else{  require "conectClass.php";  } Mas não deu certo. Tentei diretamente pelo PHP, mas quando clico no link criado, ele me obriga que a página do link esteja dentro dos subdiretórios. Em cada subdomínio coloquei da seguinte forma:
      include 'sistema/'; E no index.php do diretório sistema/:
      $host = $_SERVER['SERVER_NAME']; $host = str_replace(['www.', '.site.com.br', 'site.com.br'], '', $host); if($host == '') {     // entra o conteúdo do sistema } else {     // Entra o conteúdo do subdomínio } Mas também não funcionou. Como eu poderia resolver isso?

      Muito obrigado!
    • By klasss
      Olá a todos, 

      Gostaria de saber se alguem conhece um layout para efetuar o registo de folha de ponto. 

      Algo do género :  Mês - Dias do mês em questão - Possibilidade de colocar as horas trabalhadas. 

      Deixo uma imagem de exemplo. 
      Obrigado!
       

    • By b2black
      Quando preencho o cadastro e clico em cadastrar, a informação não é salva no banco de dados, e também, como pode ver na imagem action2, as informações digitadas permanecem nos campos imput e o nome vai para o alerta de erro de mensagem em baixo do campo....
       
      <?php require_once "config.php"; $idclient = $fullname = $cpfclient = $gender = $phone = $email = $dayagend = $houragend = ""; $idclient_err = $fullname_err = $cpfclient_err = $gender_err = $phone_err = $email_err = $dayagend_err = $houragend_err = ""; if($_SERVER["REQUEST_METHOD"] == "POST"){ // $input_idclient = trim($_POST["idclient"]); if(empty($input_idclient)){ $idclient_err = "ID de identificação do cliente."; } else{ $idclient = $input_idclient; } $input_fullname = trim($_POST["fullname"]); if(empty($input_fullname)){ $fullname_err = "Por favor, insira o nome completo do cliente."; /*} elseif(!filter_var($input_fullname, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){ $fullname_err = "Por favor, insira um nome válido de cliente.";*/ } else{ $fullname = $input_fullname; } $input_cpfclient = trim($_POST["cpfclient"]); if(empty($input_cpfclient)){ $cpfclient_err = "Por favor, insira o CPF do cliente."; } elseif(!ctype_digit($input_cpfclient)){ $cpfclient_err = "Por favor, coloque apenas números do CPF."; } else{ $cpfclient = $input_cpfclient; } $input_gender = trim($_POST["gender"]); if(empty($input_gender)){ $gender_err = "Por favor, escolha o gênero do cliente."; } else{ $gender = $input_gender; } $input_phone = trim($_POST["phone"]); if(empty($input_phone)){ $phone_err = "Por favor, insira o telefone do cliente."; } elseif(!ctype_digit($input_phone)){ $phone_err = "Por favor, é necessário inserir o telefone de contato do cliente."; } else{ $phone = $input_phone; } $input_email = trim($_POST["email"]); if(empty($input_email)){ $email_err = "Por favor, insira o e-mail do cliente."; } else{ $email = $input_email; } $input_dayagend = trim($_POST["dayagend"]); if(empty($input_dayagend)){ $dayagend_err = "Por favor, coloque a data do atendimento do cliente."; } elseif(!ctype_digit($input_dayagend)){ $dayagend_err = "Por favor, é necessário uma data de atendimento para o cliente."; } else{ $dayagend = $input_dayagend; } $input_houragend = trim($_POST["houragend"]); if(empty($input_houragend)){ $houragend_err = "Por favor, coloque a data do atendimento do cliente."; } elseif(!ctype_digit($input_houragend)){ $houragend_err = "Por favor, é necessário uma data de atendimento para o cliente."; } else{ $houragend = $input_houragend; } if(empty($idclient) && empty($fullname_err) && empty($cpfclient_err)&& empty($gender_err)&& empty($phone_err)&& empty($email_err)&& empty($dayagend_err)&& empty($houragend_err)){ $sql = "INSERT INTO schedule (idclient, fullname, cpfclient, gender, phone, email, dayagend, houragend) VALUES (?, ?, ?)"; if($stmt = mysqli_prepare($link, $sql)){ mysqli_stmt_bind_param($stmt, "sss", $param_idclient, $param_fullname, $param_cpfclient, $param_gender, $param_phone, $param_email, $param_dayagend, $param_houragend); $param_idclient = $idclient; $param_fullname = $fullname; $param_cpfclient = $cpfclient; $param_gender = $gender; $param_phone = $phone; $param_email = $email; $param_dayagend = $dayagend; $param_houragend = $houragend; if(mysqli_stmt_execute($stmt)){ header("location: index.php"); exit(); } else{ echo "Ops! Algo deu errado. Por favor, tente novamente mais tarde."; } } if($stmt = mysqli_prepare($link, $sql)){ // [...] mysqli_stmt_close($stmt); } } mysqli_close($link); } ?> <!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="UTF-8"> <title>Agenda dos Clientes</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> <style> .wrapper{ width: 600px; margin: 0 auto; } </style> </head> <body> <div class="wrapper"> <div class="container-fluid"> <div class="row"> <div class="col-md-12"> <h2 class="mt-5">Cadastro do Cliente</h2> <p>Por favor, preencha os campos abaixos para agendar o cliente.</p> <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post"> <div class="form-group"> <label>ID DO CLIENTE</label> <input type="text" name="idclient" class="form-control <?php echo (!empty($idclient_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $idclient; ?>"> <span class="invalid-feedback"><?php echo $idclient_err;?></span> </div> <div class="form-group"> <label>NOME COMPLETO</label> <input type="text" name="fullname" class="form-control <?php echo (!empty($fullname_err)) ? 'is-invalid' : ''; ?>"><?php echo $fullname; ?> <span class="invalid-feedback"><?php echo $fullname_err;?></span> </div> <div class="form-group"> <label>CPF</label> <input type="text" name="cpfclient" class="form-control <?php echo (!empty($cpfclient_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $cpfclient; ?>"> <span class="invalid-feedback"><?php echo $cpfclient_err;?></span> </div> <div class="form-group"> <label>GÊNERO</label> <input type="text" name="gender" class="form-control <?php echo (!empty($gender_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $gender; ?>"> <span class="invalid-feedback"><?php echo $gender_err;?></span> </div> <div class="form-group"> <label>Telefone</label> <input type="text" name="phone" class="form-control <?php echo (!empty($phone_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $phone; ?>"> <span class="invalid-feedback"><?php echo $phone_err;?></span> </div> <div class="form-group"> <label>E-mail</label> <input type="text" name="email" class="form-control <?php echo (!empty($email_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $email; ?>"> <span class="invalid-feedback"><?php echo $email_err;?></span> </div> <div class="form-group"> <label>Agendar Dia</label> <input type="text" name="dayagend" class="form-control <?php echo (!empty($dayagend_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $dayagend; ?>"> <span class="invalid-feedback"><?php echo $dayagend_err;?></span> </div> <div class="form-group"> <label>Agendar Horário</label> <input type="text" name="houragend" class="form-control <?php echo (!empty($houragend_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $houragend; ?>"> <span class="invalid-feedback"><?php echo $houragend_err;?></span> </div> <input type="submit" class="btn btn-primary" value="Submit"> <a href="index.php" class="btn btn-secondary ml-2">Cancel</a> </form> </div> </div> </div> </div> </body> </html>  


×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.