O analisador Expat integrado torna possível processar documentos XML em PHP.
XML é usado para descrever dados, com foco no que são os dados. Os arquivos XML descrevem a estrutura dos dados.
Em XML, não há tags predefinidas. Você deve definir suas próprias tags.
Para saber mais sobre XML, visite nosso tutorial de XML.
Para ler e atualizar – criar e processar – um documento XML, você precisa de um analisador XML.
Existem dois tipos básicos de analisadores XML:
Analisador baseado em árvore: Este analisador converte documentos XML em uma estrutura de árvore. Ele analisa todo o documento e fornece acesso aos elementos da árvore, como o Document Object Model (DOM).
Analisador baseado em eventos: trata um documento XML como uma série de eventos. Quando ocorre um evento específico, o analisador chama uma função para tratá-lo.
O analisador Expat é um analisador baseado em eventos.
Os analisadores baseados em eventos concentram-se no conteúdo dos documentos XML e não na sua estrutura. Por causa disso, os analisadores baseados em eventos são capazes de acessar dados mais rapidamente do que os analisadores baseados em árvore.
Por favor, veja o seguinte fragmento XML:
<de>Jani</from>
O analisador baseado em eventos relata o XML acima como uma sequência de três eventos:
Elemento inicial: de
Iniciar seção CDATA, valor: Jani
Fechar elemento: de
O exemplo XML acima contém XML bem formado. No entanto, esta instância é XML inválida porque não há nenhuma declaração de tipo de documento (DTD) associada a ela.
No entanto, isso não faz diferença ao usar o analisador Expat. Expat é um analisador que não verifica a validade e ignora qualquer DTD.
Como um analisador XML não validado e baseado em eventos, o Expat é rápido e leve, tornando-o ideal para aplicativos Web PHP.
Nota: O documento XML deve estar bem formado ou o Expat gerará um erro.
A função do analisador XML Expat é parte integrante do núcleo do PHP. Nenhuma instalação é necessária para usar essas funções.
O seguinte arquivo XML será usado em nosso exemplo:
<?xml version="1.0" encoding="ISO-8859-1"?><note><to>Tove</to><from>Jani</from><heading>Lembrete</heading><body>Don não se esqueça de mim neste fim de semana!</body></note>
Precisamos inicializar o analisador XML em PHP, definir manipuladores para diferentes eventos XML e então analisar o arquivo XML.
<?php//Inicializar o analisador XML$parser=xml_parser_create();//Função a ser usada no início de um elementofunction start($parser,$element_name,$element_attrs) { switch($element_name) { case "NOTE": echo "-- Nota --<br>"; break case "TO": echo "To: "; break case "FROM": echo "From:"; "HEADING": echo "Título: "; break case "BODY": echo "Message: "; } }//Função a ser usada no final de um elementofunction stop($parser,$element_name) { echo "<br> "; }//Função a ser usada ao encontrar caracteres datafunction char($parser,$data) { echo $data; }//Especificar elemento handlerxml_set_element_handler($parser,"start","stop");//Especificar manipulador de dadosxml_set_character_data_handler($parser,"char");//Abrir arquivo XML$fp=fopen("test.xml","r");/ /Ler dadoswhile ($data=fread($fp,4096)) { xml_parse($parser,$data,feof($fp)) ou die (sprintf("Erro XML: %s na linha %d", xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser))); /Libere o analisador XMLxml_parser_free($parser);?>
O código acima irá gerar:
-- Nota --Para: ToveFrom: JaniHeading: ReminderMessage: Não se esqueça de mim neste fim de semana!
Como funciona:
Inicialize o analisador XML por meio da função xml_parser_create()
Crie funções que funcionem com diferentes manipuladores de eventos
Adicione a função xml_set_element_handler() para definir qual função executar quando o analisador encontrar as tags de abertura e fechamento
Adicione a função xml_set_character_data_handler() para definir qual função executar quando o analisador encontrar dados de caracteres
Analise o arquivo "test.xml" através da função xml_parse()
Em caso de erros, adicione a função xml_error_string() para converter erros XML em descrições de texto
Chame a função xml_parser_free() para liberar a memória alocada para a função xml_parser_create()
Para saber mais sobre a função PHP Expat, visite nosso manual de referência do PHP XML Parser.