xml_error_string()
La fonction xml_error_string() est une fonction PHP intégrée qui récupère la description textuelle d'une erreur de l'analyseur XML.
La fonction xml_error_string() est une fonction PHP intégrée qui récupère la description textuelle d'une erreur de l'analyseur XML. Elle fait partie de l'extension legacy XML Parser. Lors de l'analyse de fichiers XML avec SimpleXML ou d'autres bibliothèques modernes, les erreurs sont généralement gérées via libxml_get_errors(), car l'extension xml legacy est dépréciée dans les versions récentes de PHP.
La fonction xml_error_string() est utile lorsque vous devez récupérer un message d'erreur lisible par l'utilisateur dans des flux d'analyse XML hérités, bien que les applications modernes devraient préférer libxml_get_errors() pour SimpleXML.
Syntaxe
La syntaxe de la fonction xml_error_string() est la suivante :
syntaxe de la fonction xml_error_string()
xml_error_string(int $error_code): string|falseParamètres
$error_code— un code d'erreur entier, tel que renvoyé parxml_get_error_code(). L'extension XML Parser expose ces codes sous forme de constantesXML_ERROR_*(par exemple,XML_ERROR_NONEvaut0, ce qui signifie « aucune erreur »).
Valeur de retour
xml_error_string() renvoie une chaîne lisible décrivant le code d'erreur donné (par exemple "Attribute without value"). Si le code est inconnu, elle renvoie false. Notez que la fonction se contente de convertir un code en texte — elle n'indique pas où dans le document l'erreur s'est produite ; pour cela, vous avez également besoin de xml_get_current_line_number() et xml_get_current_column_number().
Exemples d'utilisation
Voyons quelques exemples pratiques d'utilisation de xml_error_string() en PHP.
Exemple 1 : Récupérer la chaîne d'erreur de l'analyseur XML (analyseur XML legacy)
La fonction xml_error_string() fonctionne avec l'extension XML Parser legacy. Vous pouvez l'utiliser pour analyser du XML et récupérer la chaîne d'erreur, comme suit :
analyser le fichier XML et récupérer la chaîne d'erreur avec xml_error_string() en PHP
$parser = xml_parser_create();
$xml_data = "<invalid xml>";
xml_parse($parser, $xml_data);
$error_code = xml_get_error_code($parser);
if ($error_code !== XML_ERROR_NONE) {
$error_string = xml_error_string($error_code);
echo "Error: $error_string";
}
xml_parser_free($parser);Ce code crée un analyseur XML avec xml_parser_create(), tente d'analyser la chaîne malformée "<invalid xml>" (xml est interprété comme un nom d'attribut sans valeur), puis vérifie la présence d'erreurs. xml_get_error_code() renvoie un code non nul, xml_error_string() le convertit en texte, et le script libère l'analyseur avec xml_parser_free().
Résultat :
Error: Attribute without valueExemple 2 : Localiser précisément l'emplacement de l'erreur
Une simple chaîne d'erreur aide rarement un développeur à corriger le document. Combinez xml_error_string() avec les fonctions de numéro de ligne et de colonne pour signaler exactement où l'analyseur s'est arrêté :
afficher le message d'erreur avec sa localisation
$parser = xml_parser_create();
$xml_data = "<book>\n <title>Hi</titlex>\n</book>";
if (!xml_parse($parser, $xml_data, true)) {
$code = xml_get_error_code($parser);
printf(
"Error %d: %s at line %d, column %d\n",
$code,
xml_error_string($code),
xml_get_current_line_number($parser),
xml_get_current_column_number($parser)
);
}
xml_parser_free($parser);Ici, la balise fermante </titlex> ne correspond pas à l'ouvrante <title>, ce qui provoque un échec d'analyse à la ligne 2. Les fonctions de localisation indiquent l'emplacement exact :
Résultat :
Error 76: Mismatched tag at line 2, column 21Le code numérique exact et son libellé dépendent de votre version de libxml, mais xml_error_string() renvoie toujours le message lisible correspondant au code renvoyé par xml_get_error_code().
Exemple 2 : Gérer les erreurs SimpleXML (approche moderne recommandée)
Si vous utilisez la bibliothèque SimpleXML, xml_error_string() n'est pas applicable. Utilisez plutôt libxml_use_internal_errors(true) et libxml_get_errors() pour gérer les échecs d'analyse :
Afficher un message d'erreur de l'analyseur XML
libxml_use_internal_errors(true);
if (isset($_FILES["xml_file"])) {
$xml = simplexml_load_file($_FILES["xml_file"]["tmp_name"]);
if ($xml === false) {
$errors = libxml_get_errors();
foreach ($errors as $error) {
echo "Error: " . $error->message;
}
} else {
// process the XML file
}
}Ce code active la gestion interne des erreurs pour SimpleXML, vérifie si un fichier XML a été téléversé via le tableau $_FILES, et tente de charger le fichier. En cas d'erreur lors de l'analyse, il récupère les détails via libxml_get_errors() et affiche le message d'erreur à l'utilisateur. Si aucune erreur ne survient, le code peut traiter le fichier XML selon les besoins.
Codes d'erreur courants de l'analyseur XML
L'extension XML Parser définit des constantes nommées pour les cas « aucune erreur » et de bonne formation. La seule valeur sur laquelle vous pouvez toujours compter est XML_ERROR_NONE (0), qui indique que l'analyse a réussi. Voici quelques codes bas courants et les chaînes que xml_error_string() renvoie pour chacun :
| Code | Message renvoyé par xml_error_string() |
|---|---|
| 0 | No error (matches XML_ERROR_NONE) |
| 1 | No memory |
| 2 | Invalid document start |
| 3 | Empty document |
| 4 | Not well-formed (invalid token) |
| 5 | Invalid document end |
Attention : le code entier renvoyé par une analyse réelle, ainsi que son libellé, sont produits par la bibliothèque libxml sous-jacente et varient selon les versions de PHP/libxml — passez donc toujours la valeur active de
xml_get_error_code()àxml_error_string()plutôt que de supposer un numéro fixe. Seule la vérification de succèsXML_ERROR_NONE(0) est stable entre les versions.
Comparer avec XML_ERROR_NONE (plutôt qu'un 0 codé en dur) préserve la lisibilité de votre vérification de succès.
Fonctions associées
xml_get_error_code()— renvoie le code numérique à passer àxml_error_string().xml_parse()— exécute l'analyseur et déclenche l'erreur que vous décrivez ensuite.xml_get_current_line_number()/xml_get_current_column_number()— localisent l'erreur dans la source.libxml_get_errors()— l'équivalent moderne utilisé avec SimpleXML.
Conclusion
Dans cet article, nous avons présenté la fonction PHP xml_error_string() et son utilisation pour récupérer la description textuelle d'une erreur de l'analyseur XML dans des flux d'analyse XML hérités. Nous avons expliqué ce que fait la fonction, sa syntaxe, et fourni des exemples d'utilisation. Pour les applications PHP modernes utilisant SimpleXML, nous recommandons d'utiliser libxml_use_internal_errors(true) et libxml_get_errors() pour gérer les échecs d'analyse, afin de rendre vos applications web plus robustes et conviviales.