W3docs

xml_parser_create_ns()

A função xml_parser_create_ns() cria um novo parser XML com suporte a namespaces em PHP. Saiba como usá-la com exemplos práticos.

A função xml_parser_create_ns() é uma função embutida do PHP que cria um novo parser XML com suporte a namespaces. Ela pertence à extensão XML Parser e é utilizada ao processar documentos XML. Ao contrário do SimpleXML, essa função trabalha com uma API pull orientada a eventos, permitindo processar fluxos XML de forma eficiente. Quando o suporte a namespaces está habilitado, o parser resolve automaticamente os prefixos de namespace e passa nomes de elementos estruturados para seus handlers, eliminando a necessidade de resolução manual de prefixos.

Sintaxe

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

Sintaxe da função xml_parser_create_ns() em PHP

xml_parser_create_ns(?string $encoding = null, string $namespace_separator = '?')

Onde $encoding é a codificação de caracteres usada pelos dados XML (por exemplo, 'UTF-8'), e $namespace_separator é o caractere usado para unir URIs de namespace com nomes locais nos callbacks dos handlers (o padrão é ?). Ambos os parâmetros são opcionais.

Exemplos de Uso

Vamos ver exemplos práticos de uso de xml_parser_create_ns() em PHP.

Exemplo 1: Criando um Parser XML

Para criar um parser, chame xml_parser_create_ns(). Isso retorna um recurso de parser que deve ser configurado com handlers de elemento e caractere antes do processamento.

criar um novo parser XML com suporte a namespaces

$parser = xml_parser_create_ns();
// Configure handlers and parse data...

Este código cria um novo parser com processamento de namespaces habilitado. O recurso de parser é então utilizado com xml_set_element_handler() e xml_parse() para processar dados XML.

Exemplo 2: Processando Dados XML com Prefixos de Namespace

Quando o suporte a namespaces está habilitado, a extensão XML Parser resolve automaticamente os prefixos de namespace. Os nomes de elementos passados para os handlers são formatados como namespace_uri?local_name (usando o separador padrão). A resolução de namespace é tratada pelo próprio parser, não manualmente.

processar dados XML usando a extensão XML Parser

$parser = xml_parser_create_ns();
$xml_data = '<?xml version="1.0"?><root xmlns:ns="http://example.com"><ns:child>value</ns:child></root>';

xml_set_element_handler($parser, function($parser, $name) {
    echo "Element: $name\n";
}, function($parser, $name) {
    echo "End Element: $name\n";
});

xml_parse($parser, $xml_data);
xml_parser_free($parser);

Este código cria um parser, define handlers para capturar nomes de elementos e processa a string XML. O nome do elemento ns:child é resolvido automaticamente e passado ao handler como http://example.com?child.

Exemplo 3: Personalizando a Codificação de Caracteres e o Separador

Por padrão, xml_parser_create_ns() assume que os dados XML utilizam a codificação padrão do sistema. Você pode especificar uma codificação e um separador de namespace personalizado para garantir o tratamento correto de caracteres e a formatação dos callbacks.

personalizar a codificação e o separador para o correto tratamento de caracteres

$parser = xml_parser_create_ns('UTF-8', '|');
$xml_data = '<?xml version="1.0"?><root xmlns:ns="http://example.com"><ns:child>value</ns:child></root>';

xml_set_element_handler($parser, function($parser, $name) {
    echo "Element: $name\n";
}, null);

xml_parse($parser, $xml_data);
xml_parser_free($parser);

Este código cria um parser com codificação UTF-8 e um separador | personalizado. O recurso de parser é liberado após o uso para evitar vazamentos de memória.

Prática

Prática
Qual será a saída do código PHP fornecido na URL vinculada?
Qual será a saída do código PHP fornecido na URL vinculada?
Was this page helpful?