Array
(
)

Ler XML Tag com Prefixo em PHP

PHP
Alekym
   - 14 jan 2015

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

William (devwilliam)
   - 15 jan 2015

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/

0
|
0

Alekym
   - 15 jan 2015

Ainda não funcionou, da erro:

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

começo do XML:

#Código

<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:

#Código
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.

0
|
0

Alekym
   - 15 jan 2015


Citação:
Ainda não funcionou, da erro:

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

começo do XML:

#Código

<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:

#Código
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:
#Código
$xml->children($campos['cabecalho'])


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

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

0
|
0

William (devwilliam)
   - 15 jan 2015

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

Estou encerrando o tópico.

0
|
0