xml_parser_get_option()
A função xml_parser_get_option() é uma função interna do PHP que obtém uma opção definida em um parser XML criado com a extensão Expat legada.
A função xml_parser_get_option() lê o valor atual de uma opção de configuração em um parser XML criado com a extensão xml legada baseada em Expat. Cada parser mantém um pequeno conjunto de opções (dobragem de maiúsculas, codificação de destino e ignorar espaços em branco) que controlam como ele transforma a marcação bruta em eventos. Você as define com xml_parser_set_option(); você as lê de volta com xml_parser_get_option().
Na prática, você a utiliza para confirmar a configuração de um parser antes de iniciar a análise — por exemplo, para verificar se a dobragem de maiúsculas ainda está ativa ou para registrar qual codificação de destino um parser produzirá. É o complemento somente leitura do setter e nunca altera o parser.
Esta página abrange a assinatura da função, as opções que você pode consultar (e seus padrões), um exemplo executável e as armadilhas que vale conhecer — incluindo o fato de que o Expat é uma API de baixo nível que a maioria dos projetos não utiliza mais diretamente.
Sintaxe
xml_parser_get_option(XMLParser $parser, int $option): string|int|bool$parser é o identificador do parser retornado por xml_parser_create() (desde o PHP 8.0, este é um objeto XMLParser em vez de um resource). $option é uma das constantes XML_OPTION_* abaixo. O tipo de retorno depende da opção: um boolean para os sinalizadores ligado/desligado, um inteiro para XML_OPTION_SKIP_TAGSTART e uma string para XML_OPTION_TARGET_ENCODING.
Opções disponíveis
| Constante | Tipo | Padrão | O que controla |
|---|---|---|---|
XML_OPTION_CASE_FOLDING | bool | true | Se os nomes de elementos/atributos são convertidos para maiúsculas antes de chegarem aos seus handlers. |
XML_OPTION_TARGET_ENCODING | string | "UTF-8" | A codificação para a qual o parser converte os dados analisados. |
XML_OPTION_SKIP_WHITE | bool | false | Se os dados de caracteres compostos apenas por espaços em branco são ignorados. |
XML_OPTION_SKIP_TAGSTART | int | 0 | Quantos caracteres ignorar do início de um nome de tag. |
Consultar uma opção desconhecida retorna false.
Exemplos
Lendo uma única opção
Isso cria um parser, desativa a dobragem de maiúsculas e depois lê a opção de volta. Como false é retornado, a mensagem informa "desativada":
<?php
$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, false);
$caseFolding = xml_parser_get_option($parser, XML_OPTION_CASE_FOLDING);
echo "Case folding is " . ($caseFolding ? "enabled" : "disabled") . ".\n";Saída:
Case folding is disabled.Inspecionando padrões e confirmando alterações
Um parser recém-criado já possui padrões sensatos. Lê-los antes e depois de uma chamada set é uma boa maneira de verificar se sua configuração teve efeito:
<?php
$parser = xml_parser_create();
// Defaults on a brand-new parser.
echo "Default case folding: ";
var_dump(xml_parser_get_option($parser, XML_OPTION_CASE_FOLDING)); // bool(true)
echo "Default encoding: ";
var_dump(xml_parser_get_option($parser, XML_OPTION_TARGET_ENCODING)); // string(5) "UTF-8"
// Change two options, then confirm them.
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, false);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, true);
printf("Case folding now: %s\n", xml_parser_get_option($parser, XML_OPTION_CASE_FOLDING) ? "on" : "off");
printf("Skip whitespace: %s\n", xml_parser_get_option($parser, XML_OPTION_SKIP_WHITE) ? "on" : "off");Saída:
Default case folding: bool(true)
Default encoding: string(5) "UTF-8"
Case folding now: off
Skip whitespace: onDefina suas opções primeiro, verifique-as com xml_parser_get_option() se quiser, e somente então alimente os dados para xml_parse(). Depois que a análise começa, alterar as opções de dobragem de maiúsculas ou codificação não é mais permitido.
Notas e armadilhas
- Apenas leitura. Esta função nunca muta o parser. Para alterar uma opção, use
xml_parser_set_option(). - Retorna tipos mistos. Trate o resultado por opção: um sinalizador bool, um int para
SKIP_TAGSTARTou uma string para a codificação. Não assuma um boolean para todas as opções. - O Expat é de baixo nível e desatualizado. A extensão
xml(Expat) é anterior às APIs modernas. A menos que você precise especificamente de análise baseada em eventos ("SAX") de documentos muito grandes, SimpleXML ou DOM geralmente são mais fáceis e seguros. Note queXML_OPTION_CASE_FOLDINGcom padrãotrueé a surpresa clássica: os nomes de elementos chegam em maiúsculas a menos que você desative isso. - Libere o parser quando terminar. Embora o PHP libere o objeto
XMLParserpor conta própria, você pode chamarxml_parser_free()para liberá-lo explicitamente.
Conclusão
xml_parser_get_option() é a metade getter do par de opções do parser Expat: retorna o valor atual de XML_OPTION_CASE_FOLDING, XML_OPTION_TARGET_ENCODING, XML_OPTION_SKIP_WHITE ou XML_OPTION_SKIP_TAGSTART sem alterar nada. Use-a para confirmar a configuração de um parser antes de chamar xml_parse(). Para novo código que não precisa de análise SAX de baixo nível, prefira SimpleXML ou a extensão DOM.