xml_parser_set_option()
La fonction xml_parser_set_option() est une fonction PHP intégrée qui définit une option sur un analyseur XML. Découvrez sa syntaxe et ses exemples.
La fonction xml_parser_set_option() est une fonction PHP intégrée qui définit des options de configuration sur un analyseur XML. Elle appartient à l'extension XML Parser (Expat) héritée, qui analyse le XML en mode SAX — déclenchant des rappels d'événements lors de la lecture — plutôt que de construire un arbre en mémoire comme SimpleXML ou DOM. Vous l'appelez après xml_parser_create() mais avant l'analyse, pour contrôler la façon dont l'analyseur traite la casse des noms de balises, les espaces blancs et l'encodage des caractères.
Syntaxe
xml_parser_set_option(XMLParser $parser, int $option, string|int $value): bool$parser— l'analyseur retourné parxml_parser_create(). Depuis PHP 8.0, c'est un objetXMLParser; en PHP 7 et versions antérieures, c'était une ressource.$option— l'une des constantes d'option ci-dessous.$value— la valeur à définir pour cette option.
La fonction retourne true en cas de succès, ou false si l'analyseur ou l'option est invalide.
Options disponibles
| Constante | Type | Ce qu'elle contrôle |
|---|---|---|
XML_OPTION_CASE_FOLDING | bool (défaut true) | Lorsqu'activée, les noms de balises et d'attributs sont convertis en majuscules avant d'atteindre vos gestionnaires. Définir à false pour conserver la casse d'origine. |
XML_OPTION_SKIP_TAGSTART | int | Nombre de caractères à ignorer depuis le début d'un nom de balise. |
XML_OPTION_SKIP_WHITE | bool | Lorsque true, les éléments contenant uniquement des espaces blancs sont ignorés. |
XML_OPTION_TARGET_ENCODING | string | L'encodage transmis à vos gestionnaires — l'un de ISO-8859-1 (défaut), US-ASCII ou UTF-8. |
Lire la valeur courante avec
xml_parser_get_option(). Définir une option après le début de l'analyse n'a aucun effet, configurez donc l'analyseur en premier.
Pourquoi le repliement de casse est important
C'est l'option que vous utiliserez le plus souvent. Par défaut, l'analyseur convertit en majuscules chaque nom de balise, donc un élément <note> arrive dans votre gestionnaire sous la forme NOTE. Cela surprend les personnes qui comparent les noms avec des chaînes en minuscules. Désactiver le repliement de casse conserve les noms exactement tels qu'écrits :
$parser = xml_parser_create();
// Default behaviour: case folding ON → names arrive upper-cased
xml_set_element_handler($parser,
fn($p, $name, $attrs) => print("Start: $name\n"),
fn($p, $name) => null
);
xml_parse($parser, "<note><to>Tove</to></note>", true);
xml_parser_free($parser);Sortie :
Start: NOTE
Start: TODéfinir XML_OPTION_CASE_FOLDING à false et la même entrée conserve sa casse d'origine (note, to).
Un exemple complet
L'extension XML Parser est orientée événements : rien ne se passe tant que vous n'enregistrez pas de gestionnaires et ne lui fournissez pas des données. Cet exemple crée un analyseur, définit deux options, enregistre des gestionnaires de début/fin, et analyse une chaîne XML intégrée — aucun fichier externe n'est requis, vous pouvez donc l'exécuter tel quel :
$parser = xml_parser_create();
// Keep the original tag case instead of upper-casing
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, false);
// Drop elements that contain only whitespace
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, true);
xml_set_element_handler(
$parser,
function ($parser, $name, $attrs) {
echo "Start: $name\n";
},
function ($parser, $name) {
echo "End: $name\n";
}
);
$xml = "<note>\n <to>Tove</to>\n <from>Jani</from>\n</note>";
xml_parse($parser, $xml, true);
xml_parser_free($parser);Sortie :
Start: note
Start: to
End: to
Start: from
End: from
End: noteComme le repliement de casse est désactivé, les noms de balises conservent leur orthographe en minuscules. L'appel à xml_set_element_handler() est ce qui permet à xml_parse() d'émettre ces événements ; sans gestionnaires enregistrés, l'analyseur lirait le document sans produire aucune sortie. Appelez toujours xml_parser_free() lorsque vous avez terminé pour libérer l'analyseur.
Quand l'utiliser
Utilisez xml_parser_set_option() uniquement lorsque vous travaillez déjà avec l'analyseur Expat de bas niveau — typiquement pour traiter en flux continu de très grands documents XML où le chargement de l'arbre entier en mémoire est indésirable. Pour la plupart des tâches courantes (lecture de configuration, consommation d'une réponse API), préférez SimpleXML, qui est bien plus simple et ne nécessite aucune configuration de ce type.
Conclusion
xml_parser_set_option() configure l'analyseur XML SAX hérité — notamment son comportement de repliement de casse, d'espaces blancs et d'encodage. Définissez chaque option avant d'appeler xml_parse(), enregistrez des gestionnaires d'éléments pour que les événements soient émis, et libérez l'analyseur ensuite. Lorsque vous avez besoin d'un traitement en flux continu précis et économe en mémoire, cette fonction vous donne ce contrôle ; sinon SimpleXML ou DOM sont le choix le plus simple.