W3docs

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é par xml_parser_create(). Depuis PHP 8.0, c'est un objet XMLParser ; 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

ConstanteTypeCe qu'elle contrôle
XML_OPTION_CASE_FOLDINGbool (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_TAGSTARTintNombre de caractères à ignorer depuis le début d'un nom de balise.
XML_OPTION_SKIP_WHITEboolLorsque true, les éléments contenant uniquement des espaces blancs sont ignorés.
XML_OPTION_TARGET_ENCODINGstringL'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: TO

Dé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: note

Comme 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.

Pratique

Pratique
Quel est le but de la fonction xml_parser_set_option() en PHP ?
Quel est le but de la fonction xml_parser_set_option() en PHP ?
Was this page helpful?