W3docs

simplexml_load_file()

SimpleXML est une extension PHP qui fournit une API simple pour travailler avec des documents XML. Découvrez simplexml_load_file() et son utilisation.

Introduction

simplexml_load_file() lit un fichier XML depuis le disque (ou une URL) et convertit son contenu en objet SimpleXMLElement que vous pouvez naviguer avec la syntaxe habituelle des propriétés PHP et des tableaux. C'est le point d'entrée basé sur les fichiers de l'extension SimpleXML — la façon la plus simple de transformer un document XML en quelque chose que vous pouvez parcourir et lire.

Utilisez-la chaque fois que vous disposez d'un fichier XML — un fichier de configuration, un flux RSS/Atom, une réponse d'API sauvegardée sur disque, ou un sitemap — et que vous souhaitez extraire des valeurs sans écrire un analyseur manuellement. Si votre XML se trouve dans une chaîne plutôt que dans un fichier, utilisez plutôt sa fonction sœur simplexml_load_string().

Ce chapitre couvre la signature de la fonction, un exemple complet et fonctionnel (incluant le XML qu'il lit), la façon d'accéder aux attributs et aux espaces de noms, et la gestion propre des échecs de chargement.

Syntaxe

simplexml_load_file(
    string $filename,
    ?string $class_name = SimpleXMLElement::class,
    int $options = 0,
    string $namespace_or_prefix = "",
    bool $is_prefix = false
): SimpleXMLElement|false
ParamètreDescription
$filenameChemin ou URL du fichier XML à charger.
$class_nameClasse à instancier. Doit étendre SimpleXMLElement ; par défaut SimpleXMLElement lui-même.
$optionsMasque de bits de constantes d'options libxml telles que LIBXML_NOCDATA ou LIBXML_NOBLANKS.
$namespace_or_prefixPréfixe d'espace de noms ou URI pour restreindre l'arbre retourné.
$is_prefixtrue si l'argument précédent est un préfixe, false s'il s'agit d'un URI.

Valeur de retour : un SimpleXMLElement en cas de succès, ou false si le fichier ne peut pas être lu ou contient du XML malformé.

Un exemple complet

Supposons qu'un fichier nommé books.xml se trouve à côté de votre script :

<?xml version="1.0" encoding="UTF-8"?>
<library>
  <book id="b1">
    <title>The PHP Way</title>
    <author>Jane Doe</author>
    <price currency="USD">29.99</price>
  </book>
  <book id="b2">
    <title>XML in Practice</title>
    <author>John Smith</author>
    <price currency="EUR">24.50</price>
  </book>
</library>

Chargez-le, confirmez qu'il a été analysé, et itérez sur les éléments <book> :

<?php

$xml = simplexml_load_file('books.xml');

if ($xml === false) {
    echo "Failed to load XML file.\n";
    exit(1);
}

foreach ($xml->book as $book) {
    echo $book->title . " by " . $book->author . "\n";
}

Résultat :

The PHP Way by Jane Doe
XML in Practice by John Smith

Notez la comparaison stricte === false. Les objets SimpleXML sont « truthy », donc une vérification souple if (!$xml) peut se comporter de façon inattendue dans certains cas limites — comparez toujours explicitement avec false.

Lire les attributs

SimpleXML expose les éléments enfants comme propriétés d'objet ($book->title) et les attributs XML via un accès de style tableau ($book['id']). Comme les valeurs sont des objets SimpleXMLElement plutôt que des chaînes simples, convertissez-les avec (string) avant de les utiliser dans des calculs ou des comparaisons :

<?php

$xml = simplexml_load_file('books.xml');

foreach ($xml->book as $book) {
    $id       = (string) $book['id'];
    $currency = (string) $book->price['currency'];
    echo "{$id}: {$book->title} — {$book->price} {$currency}\n";
}

Résultat :

b1: The PHP Way — 29.99 USD
b2: XML in Practice — 24.50 EUR

Travailler avec les espaces de noms

Lorsqu'un document déclare des espaces de noms XML, l'accès par propriété simple n'atteint que l'espace de noms par défaut. Utilisez ->children($namespaceUri) pour descendre dans une branche avec espace de noms et ->attributes($namespaceUri) pour lire les attributs d'espace de noms :

<?php
// Access elements in the Atom namespace.
$atom = $xml->children('http://www.w3.org/2005/Atom');
echo $atom->title;

Pour un aperçu plus approfondi des espaces de noms et de la traversée, consultez SimpleXML en PHP.

Gérer les échecs de chargement proprement

Par défaut, un XML malformé émet des avertissements PHP. Pour les supprimer et inspecter les erreurs vous-même, activez la gestion interne des erreurs avec libxml_use_internal_errors() avant le chargement :

<?php

libxml_use_internal_errors(true);

$xml = simplexml_load_file('missing.xml');

if ($xml === false) {
    echo "Could not load the file:\n";
    foreach (libxml_get_errors() as $error) {
        echo "  " . trim($error->message) . "\n";
    }
    libxml_clear_errors();
}

Résultat :

Could not load the file:
  failed to load external entity "missing.xml"

Ce modèle garde votre sortie propre et vous donne un accès structuré à chaque erreur d'analyse via libxml_get_errors().

Pièges courants

  • false vs. avertissement. Un fichier manquant ou une erreur de syntaxe retourne false et lève un avertissement à moins que vous n'activiez la gestion interne des erreurs. Vérifiez toujours la valeur de retour.
  • Convertissez avant de comparer. $book->price == 29.99 fonctionne par coïncidence ; (float) $book->price === 29.99 est ce que vous voulez réellement.
  • Lecture de fichiers distants. $filename peut être une URL, mais cela nécessite que allow_url_fopen soit activé dans php.ini.
  • Écriture en retour. SimpleXML est excellent pour la lecture. Pour sérialiser un élément en chaîne XML, appelez asXML().

Conclusion

simplexml_load_file() est le moyen le plus rapide de charger un fichier XML dans un arbre d'objets navigable en PHP. Combinez-le avec des vérifications strictes === false, des conversions (string) lors de la lecture des valeurs, et la gestion des erreurs libxml, et vous disposez d'une base solide pour consommer des flux, des configurations et des API XML. Pour les entrées sous forme de chaîne, utilisez simplexml_load_string(), et pour les techniques de traversée complète, continuez avec SimpleXML en PHP.

Pratique

Pratique
Quel est le but de la fonction SimpleXML_Load_File en PHP ?
Quel est le but de la fonction SimpleXML_Load_File en PHP ?
Was this page helpful?