Jump to content
Guilherme De Lima Campos

XML e PHP: Atributo da tag com espaço gera erro na leitura

Recommended Posts

Bom dia a todos, estou com o seguinte problema:

Segue arquivo XML

<?xml version="1.0" encoding="UTF-8"?>
<nfeProc versao="3.10" xsi:schemaLocation="http://www.portalfiscal.inf.br/nfe procNFe_v1.00.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ds="http://www.w3.org/2000/09/xmldsig " xmlns="http://www.portalfiscal.inf.br/nfe">
  <NFe xmlns="http://www.portalfiscal.inf.br/nfe">
  </NFe>
</nfeProc>

 

Como podem ver na tag nfeProc no atributo xmlns:ds antes da aspas de fechar ele tem um espaço.

Sendo assim, utilizando a função simplexml_load_file() ele retorna o seguinte erro: Warning: simplexml_load_file(): base_xml/22.xml:1: namespace error : xmlns:ds: 'http://www.w3.org/2000/09/xmldsig ' is not a valid URI in C:\funcoes.php on line 264

 

Alguém consegue me auxiliar pra proceder com a correção desse bug?

 

Segue a function na qual estou utilizando pra conferência de você.

	function XMLModelo($arquivo){
		
		if(empty($arquivo)){
			
			return null;
			
		} else {
			
			if(XMLValida($arquivo)){
		
				$xml = simplexml_load_file($arquivo);
				
				if($xml->CTe && !$xml->NFe && !$xml->ListaNfse){
				
					return "cte";
				
				} else if($xml->NFe && !$xml->CTe && !$xml->ListaNfse){
				
					return "nfe";
				
				} else if($xml->ListaNfse && !$xml->CTe && !$xml->NFe){
				
					return "nfse-betha";
				
				} else if(!$xml->ListaNfse && !$xml->CTe && !$xml->NFe){
					
					return "invalido";
					
				}
				
			} else {
				
				return false;
				
			}
		
		}
		
	}

 

Share this post


Link to post
Share on other sites

Veja se ajuda:
https://stackoverflow.com/questions/10519865/simplexml-load-file-not-a-valid-uri-issue

@oftopic...

 

Pq não utiliza early return, ele ajuda a evitar complexidade de escopo quando não é necessário;

 

Veja se ficou mais legível, é exatamente o seu código porem sempre que existe um return, ele retorna.. hehe 

function XMLModelo($arquivo){
    
    if(empty($arquivo)){
        
        return null;
        
    }
    
    if(!XMLValida($arquivo)){
        return false;
    }


    $xml = simplexml_load_file($arquivo);
    
    if($xml->CTe && !$xml->NFe && !$xml->ListaNfse){
    
        return "cte";
    
    } else if($xml->NFe && !$xml->CTe && !$xml->ListaNfse){
    
        return "nfe";
    
    } else if($xml->ListaNfse && !$xml->CTe && !$xml->NFe){
    
        return "nfse-betha";
    
    } else if(!$xml->ListaNfse && !$xml->CTe && !$xml->NFe){        
        return "invalido";        
    }   
   

    
}

 

Já ouviu falar sobre if-haduken?

https://diogommartins.files.wordpress.com/2016/08/hadouken-indentation.jpg?w=720&h=312&crop=1

 

 

Recomendo a leitura:

http://blog.alura.com.br/quanto-mais-simples-melhor/

  • +1 1

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 Diego-SLP
      Bom dia,
       
      Estou passando uma variavel via GET para uma pagina PHP e a SQL não interpreta a mesma.
       
      Se eu printar o numero é exibido, se eu colocar o valor manualmente na SQL ela funciona, porém quando coloco a variavel não exibe nenhum registro, se alguem puder me ajudar.
       
      <?php $id = $_GET['id']; echo $id; $procura = mysqli_query($con,"SELECT p.DATA,p.cod_func,f.nome,f.funcao,p.cod_etapa,p.entrada_1,p.saida_1,p.entrada_2,p.saida_2,p.entrada_3,p.saida_3 FROM rh_pontoFuncionario p, rh_funcionario f WHERE p.cod_func = f.cod AND p.cod_obra = '".$id."' ORDER BY p.id desc") or die (mysqli_error($procura)); while($row = mysqli_fetch_array($procura)){ ?> <tr role="row" class="odd table-sm"> <td class="text-center"> <?php echo date('d/m/Y',strtotime($row['DATA'])); ?> </td> <td class="text-center"><?php echo $row['cod_func'];?></td> <td class="text-center"><?php echo $row['nome'];?></td> <td class="text-center"><?php echo $row['funcao'];?></td> <td class="text-center"><?php echo $row['cod_etapa'];?></td> <td class="text-center"><?php echo $row['entrada_1'];?></td> <td class="text-center"><?php echo $row['saida_1'];?></td> <td class="text-center"><?php echo $row['entrada_2'];?></td> <td class="text-center"><?php echo $row['saida_2'];?></td> <td class="text-center"><?php echo $row['entrada_3'];?></td> <td class="text-center"><?php echo $row['saida_3'];?></td> <td class="project-actions text-center"> <a class="btn btn-warning btn-sm" href="#.php?id=<?php echo $row['id']; ?>"> <i class="fas fa-pencil-alt"> </i> </a> <a class="btn btn-danger btn-sm" href="#.php?id=<?php echo $row['id']; ?>"> <i class="fas fa-trash-alt"> </i> </a> </td> </tr> <?php }//while ?>  
    • By rodrigofv1994
      <?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "ajax";   $email = $_POST['email']; $senha = $_POST['senha'];   // Criando conexão $conn = new mysqli($servername, $username, $password, $dbname); // Checando conexão if ($conn->connect_error) {   die("Connection failed: " . $conn->connect_error); }   $sql = "select mail , senha from usuarios where mail = '$email' and senha = '$senha'";   $registros=$conn->count() //$registros = mysqli_num_rows($conn);   if($registros>0){     echo "1"; }else{     echo"0"; }   $conn->close(); ?>
    • By rodrigofv1994
      <?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "ajax";   $email = $_POST['email']; $senha = $_POST['senha'];   // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) {   die("Connection failed: " . $conn->connect_error); }   $sql = 'INSERT INTO usuarios VALUES (default,'$email','$senha')';   if ($conn->query($sql) === TRUE) {   echo "New record created successfully"; } else {   echo "Error: " . $sql . "<br>" . $conn->error; }   $conn->close(); ?>
    • By Camilavip
      Boa noite, alguém por acaso sabe um modo simples de se desativar um cadastro automaticamente após um período?
      Deixa eu explicar. Eu cadastro um cliente, em que na tabela do banco de dados tem o campo "ativo" onde 1 é ativado e 0 é desativado. Então eu queria cadastrar esse cliente e o ativar, mas que no período de 30 dias por exemplo ele se desativasse sozinho.  Alguém sa8e algo simples nesse sentido?
    • By Camilavip
      Boa noite a todos, estou tendo um probleminha em gravar a senha criptografada, na verdade editar, pois quando gravo vai certo, mas na edição não está dando certo.
      A baixo quando cadastro o cliente é assim, e está indo perfeito.
       
      $nome = $_POST['nome']; $email = $_POST['email']; $login = $_POST['login']; $senha = sha1($_POST['senha']); Mas na hora da edição como está um pouco diferente estou tentando colocar esse sha1 em todo lugar e não está dando
      nome='$_POST[nome]', email='$_POST[email]', login='$_POST[login]', senha='$_POST[senha]', Então no de cima no cadastro está ok, mas na edição não sei mais aonde coloco esse sha1 para dar certo ou é burrice minha mesmo,
×

Important Information

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