W3docs

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|false

Paramètres

  • $error_code — un code d'erreur entier, tel que renvoyé par xml_get_error_code(). L'extension XML Parser expose ces codes sous forme de constantes XML_ERROR_* (par exemple, XML_ERROR_NONE vaut 0, 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 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 value

Exemple 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 21

Le 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 :

CodeMessage renvoyé par xml_error_string()
0No error (matches XML_ERROR_NONE)
1No memory
2Invalid document start
3Empty document
4Not well-formed (invalid token)
5Invalid 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ès XML_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

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.

Pratique

Pratique
Que fait la fonction libxml_get_errors() en PHP ?
Que fait la fonction libxml_get_errors() en PHP ?
Was this page helpful?