Ler XML Tag com Prefixo em PHP

14/01/2015

0

PHP

Olá pessoal,

estou tendo dificuldade em ler um arquivo XML em que as Tags possuem prefixo.

Ex:

<a:titulo>
<a:subtitulo>Teste</a:subtitulo>
</a:titulo>

Estou usando a função $xml = simplexml_load_file() porém ela não está lendo as tags.

Alguém pode me ajudar?

Obrigado
Alex William

Alex William

Responder

Posts

15/01/2015

William

Dê uma olhada no manual do PHP sobre como identificar namespaces http://php.net/manual/pt_BR/simplexmlelement.getnamespaces.php.

E nesse link o usuário conseguiu resolver o problema utilizando o método que citei acima http://forum.imasters.com.br/topic/311971-ler-xml-com-prefixo-no-php/
Responder

15/01/2015

Alex William

Ainda não funcionou, da erro:

Notice: Undefined index: cabecalho in efetua_importacao.php on line 53

começo do XML:

<ans:mensagemTISS xmlns:ans="http://www.ans.gov.br/padroes/tiss/schemas" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ans.gov.br/padroes/tiss/schemas http://www.ans.gov.br/padroes/tiss/schemas/tissV3_02_00.xsd">
<ans:cabecalho>
<ans:identificacaoTransacao>
<ans:tipoTransacao>ENVIO_LOTE_GUIAS</ans:tipoTransacao>
<ans:dataRegistroTransacao>2014-12-22</ans:dataRegistroTransacao>
<ans:horaRegistroTransacao>11:15:01</ans:horaRegistroTransacao>
</ans:identificacaoTransacao>


Código que uso para leitura:

if(move_uploaded_file($_FILES['arquivo']['tmp_name'],'TISSLotes/sp_sadt/'.$arquivo))
    {
        $arq = file_get_contents('TISSLotes/sp_sadt/'.$arquivo);
        
        $xml = new SimpleXMLElement($arq);
        
        $campos = $xml->getNamespaces(true);
        
        foreach($xml->children($campos['cabecalho']) as $cabecalho)
        {
            echo $cabecalho->identificacaoTransacao;
        }
        
    }



Segui mais ou menos os mesmos passos do post que foi mostrado na resposta acima, e não funcionou.

O erro ocorre no foreach.
Responder

15/01/2015

Alex William

Ainda não funcionou, da erro:

Notice: Undefined index: cabecalho in efetua_importacao.php on line 53

começo do XML:

<ans:mensagemTISS xmlns:ans="http://www.ans.gov.br/padroes/tiss/schemas" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ans.gov.br/padroes/tiss/schemas http://www.ans.gov.br/padroes/tiss/schemas/tissV3_02_00.xsd">
<ans:cabecalho>
<ans:identificacaoTransacao>
<ans:tipoTransacao>ENVIO_LOTE_GUIAS</ans:tipoTransacao>
<ans:dataRegistroTransacao>2014-12-22</ans:dataRegistroTransacao>
<ans:horaRegistroTransacao>11:15:01</ans:horaRegistroTransacao>
</ans:identificacaoTransacao>


Código que uso para leitura:

if(move_uploaded_file($_FILES['arquivo']['tmp_name'],'TISSLotes/sp_sadt/'.$arquivo))
    {
        $arq = file_get_contents('TISSLotes/sp_sadt/'.$arquivo);
        
        $xml = new SimpleXMLElement($arq);
        
        $campos = $xml->getNamespaces(true);
        
        foreach($xml->children($campos['cabecalho']) as $cabecalho)
        {
            echo $cabecalho->identificacaoTransacao;
        }
        
    }



Segui mais ou menos os mesmos passos do post que foi mostrado na resposta acima, e não funcionou.

O erro ocorre no foreach.


RESOLVIDO!!!!

Na hora de fazer o foreach, estava chamando:
$xml->children($campos['cabecalho'])


E não é assim, tem que chamar o prefixo, no caso "ans".

Então no foreach, tem que ficar:
$xml->children($campos['ans'])
Responder

15/01/2015

William

Alekym obrigado pelo retorno com a solução do problema, tenho certeza que será útil para outros usuários!

Estou encerrando o tópico.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar