Analizador Expat XML PHP
Recomendação de curso:
O analisador integrado Expat torna possível lidar com documentos XML no PHP.
O que é XML?
Em XML, não há tags pré-definidas. Você deve definir suas próprias tags.
Se quiser aprender mais sobre XML, acesse nosso Tutorial XML.
O que é o Expat?
Para ler e atualizar - criar, processar, um documento XML, você precisa de um analisador XML.
Existem dois tipos básicos de analisadores XML:
- Analisador baseado em árvore: esse analisador converte o documento XML em uma estrutura em árvore. Ele analisa todo o documento e fornece uma API para acessar os elementos da árvore, como o modelo de objeto de documento (DOM).
- Analisador baseado em eventos: considera o documento XML como uma série de eventos. Quando um evento específico ocorre, o analisador chama funções para lidar com isso.
Analisador baseado em eventos
O analisador baseado em eventos se concentra no conteúdo do documento XML, não em seus resultados. Por isso, o analisador baseado em eventos pode acessar dados mais rapidamente do que o analisador baseado em árvore.
Veja o seguinte trecho XML:
<from>John</from>
O analisador baseado em eventos reporta o XML acima como uma série de três eventos:
- Iniciar elemento: from
- Iniciar seção CDATA, valor: John
- Fechar elemento: from
O exemplo XML acima contém XML bem formado. No entanto, este exemplo é XML inválido, pois não possui declaração de tipo de documento (DTD) associada nem DTD embebida.
No entanto, isso não faz diferença ao usar o analisador Expat. O Expat não verifica a validade e ignora qualquer DTD.
Como um analisador XML baseado em eventos e não validado, o Expat é rápido e leve, muito adequado para aplicações web PHP.
Nota:O documento XML deve estar bem formado, caso contrário, o Expat gerará erros.
Instalação
O analisador XML Expat é parte integrante do PHP. Não é necessário instalar para usar essas funções.
Arquivo XML
Vamos usar o seguinte arquivo XML em nosso exemplo:
<?xml version="1.0" encoding="ISO-8859-1"?> <note> <to>George</to> <from>John</from> <heading>Lembrete</heading> <body>Não se esqueça da reunião!</body> </note>
Inicializar analisador XML
Nós precisamos inicializar o analisador XML em PHP, definir manipuladores para diferentes eventos XML e então analisar este arquivo XML.
Exemplo
<?php //Inicializar o analisador XML $parser=xml_parser_create(); //Função a usar no início de um elemento function start($parser,$element_name,$element_attrs) { switch($element_name) { case "NOTE": echo "-- Nota --<br />"; break; case "TO": echo "Para: "; break; case "FROM": echo "De: "; break; case "HEADING": echo "Título: "; break; case "BODY": echo "Mensagem: "; } } //Função a usar no final de um elemento function stop($parser,$element_name) { echo "<br />"; } //Função a usar ao encontrar dados de caractere function char($parser,$data) { echo $data; } //Especificar manipulador de elemento xml_set_element_handler($parser,"start","stop"); //Especificar manipulador de dados xml_set_character_data_handler($parser,"char"); //Abrir arquivo XML $fp=fopen("test.xml","r"); //Ler dados while ($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))); } //Liberar o parser XML xml_parser_free($parser); ?>
Saída do código acima:
-- Nota -- Para: George De: John Título: Lembrança Mensagem: Não se esqueça da reunião!
Explicação do Funcionamento:
- Inicialize o parser XML através da função xml_parser_create()
- Crie funções que se complementam com diferentes programas de tratamento de eventos
- Adicione a função xml_set_element_handler() para definir qual função será executada quando o parser encontrar tags de início e fim
- Adicione a função xml_set_character_data_handler() para definir qual função será executada quando o parser encontrar dados de caractere
- Parse o arquivo "test.xml" através da função xml_parse()
- Caso haja erro, adicione a função xml_error_string() para converter o erro XML em texto explicativo
- Chame a função xml_parser_free() para liberar a memória alocada pela função xml_parser_create()
Mais informações sobre o parser PHP Expat
Para mais informações sobre as funções PHP Expat, acesse nosso manual de referência do Parser XML PHP.