W3docs

xml_parser_create()

A função xml_parser_create() do PHP cria um novo analisador XML no estilo SAX (orientado a eventos) usando a extensão Expat legada.

A função xml_parser_create() é uma função integrada do PHP que cria um novo analisador XML. Ela pertence à extensão legada xml (Expat) e é utilizada para análise no estilo SAX (orientada a eventos). Ao contrário de extensões de alto nível como SimpleXML ou DOMDocument, este analisador processa os dados XML sequencialmente, acionando funções de retorno de chamada definidas pelo usuário para elementos, atributos e dados de caracteres.

A função xml_parser_create() é útil quando você precisa analisar grandes arquivos XML por streaming, extrair dados específicos sem carregar o documento inteiro na memória, ou processar XML de forma sequencial e orientada a eventos.

A função retorna um analisador XML que você armazena em uma variável e passa para todas as demais funções xml_*. A partir do PHP 8.0, ela retorna um objeto XMLParser; em versões anteriores, retornava um resource. De qualquer forma, você o trata como um identificador opaco — defina os manipuladores, alimente os dados com xml_parse() e, por fim, libere-o com xml_parser_free().

Sintaxe

A sintaxe da função xml_parser_create() é a seguinte:

sintaxe da função xml_parser_create()

xml_parser_create([$encoding])

Onde $encoding é a codificação de caracteres utilizada pelos dados XML (por exemplo, "UTF-8", "ISO-8859-1" ou "US-ASCII"). Este parâmetro é opcional; quando omitido, o analisador detecta a codificação a partir da declaração XML do documento.

Exemplos de Uso

Vamos ver alguns exemplos práticos de uso do xml_parser_create() em PHP.

Exemplo 1: Criando um Analisador XML

Você pode usar a função xml_parser_create() para inicializar um recurso de analisador. Observe que criar o analisador sozinho não processa nenhum dado; você deve configurar os manipuladores e chamar xml_parse() para de fato analisar o XML.

use a função xml_parser_create() para criar um novo analisador XML em PHP

$xml_parser = xml_parser_create();

Este código cria um novo recurso de analisador XML. Por si só, é apenas um contêiner vazio pronto para ser configurado.

Exemplo 2: Analisando Dados XML

Para realmente analisar XML, você precisa configurar manipuladores de eventos e alimentar os dados no analisador usando xml_parse().

use a função xml_parser_create() para analisar dados XML em PHP

$xml_parser = xml_parser_create();
$xml_data = file_get_contents("data.xml");

// Set up element handlers
xml_set_element_handler($xml_parser, function($parser, $name) {
    echo "Start element: $name\n";
}, function($parser, $name) {
    echo "End element: $name\n";
});

// Parse the data
if (!xml_parse($xml_parser, $xml_data, true)) {
    die(sprintf("XML error: %s at line %d",
        xml_error_string(xml_get_error_code($xml_parser)),
        xml_get_current_line_number($xml_parser)));
}
xml_parser_free($xml_parser);

Este código cria um analisador, registra retornos de chamada para tags de abertura e fechamento, e usa xml_parse() para processar o arquivo XML. O analisador aciona os retornos de chamada conforme lê os dados sequencialmente.

Exemplo 3: Extraindo Dados de XML Inline

Este exemplo autocontido analisa uma string XML e coleta o texto de cada elemento em um array usando um manipulador de dados de caracteres. Ele é executado tal como está, sem nenhum arquivo externo.

extraia dados de XML usando a extensão xml em PHP

$xml_data = <<<XML
<?xml version="1.0"?>
<book>
    <title>Learn PHP</title>
    <author>W3docs</author>
</book>
XML;

$xml_parser = xml_parser_create();
$current_tag = '';
$book = [];

xml_set_element_handler(
    $xml_parser,
    function ($parser, $name) use (&$current_tag) {
        $current_tag = $name; // element names arrive UPPERCASE by default
    },
    function ($parser, $name) use (&$current_tag) {
        $current_tag = '';
    }
);

xml_set_character_data_handler(
    $xml_parser,
    function ($parser, $data) use (&$current_tag, &$book) {
        $data = trim($data);
        if ($current_tag !== '' && $data !== '') {
            $book[$current_tag] = $data;
        }
    }
);

xml_parse($xml_parser, $xml_data, true);
xml_parser_free($xml_parser);

print_r($book);

Saída:

Array
(
    [TITLE] => Learn PHP
    [AUTHOR] => W3docs
)

Observe que as chaves estão em maiúsculas. Por padrão, o analisador Expat converte os nomes dos elementos para maiúsculas, razão pela qual o manipulador armazena TITLE e AUTHOR em vez de title e author. Para manter o caso original, desative o folding de maiúsculas logo após criar o analisador:

xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false);

O manipulador de dados de caracteres também pode ser acionado várias vezes por elemento (por exemplo, quando o texto é dividido por entidades ou quebras de linha), portanto este exemplo concatena com lógica no estilo .= — aqui uma única atribuição é suficiente porque cada valor é uma string curta.

xml_parser_create() é projetado para análise orientada a eventos e não realiza validação de esquema. Para validação XSD, as extensões de nível superior DOMDocument ou SimpleXML são recomendadas.

Conclusão

Neste artigo, discutimos a função xml_parser_create() do PHP e como ela pode ser usada para criar um novo analisador XML no estilo SAX. Explicamos o que a função faz, sua sintaxe e fornecemos exemplos de como configurar manipuladores e analisar dados XML sequencialmente. Seguindo esses exemplos, você pode analisar arquivos XML por streaming de forma eficiente e extrair dados específicos em suas aplicações PHP. Para a maioria dos casos de uso modernos, considere usar SimpleXML ou DOMDocument, que oferecem APIs de nível mais alto e validação integrada sem exigir configuração manual do analisador.

Funções Relacionadas

Prática

Prática
Qual é a forma correta de criar um analisador XML em PHP?
Qual é a forma correta de criar um analisador XML em PHP?
Was this page helpful?