W3docs

simplexml_import_dom()

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

Introduction

PHP vous offre deux façons distinctes de manipuler XML : l'extension DOM, puissante et conforme aux standards mais verbeuse, et SimpleXML, qui sacrifie une partie de cette puissance pour une API bien plus conviviale, basée sur les propriétés d'objet. simplexml_import_dom() est le pont entre les deux — elle prend un nœud d'un arbre DOM et vous retourne un SimpleXMLElement qui encapsule les mêmes données.

C'est utile lorsque vous avez effectué un travail intensif avec DOM (validation par rapport à un schéma, utilisation de XPath, manipulation d'espaces de noms) mais souhaitez lire le résultat avec la syntaxe concise de SimpleXML. Cette page explique comment fonctionne la fonction, quand l'utiliser, et les pièges à éviter.

Syntaxe

simplexml_import_dom(
    object $node,
    ?string $class_name = SimpleXMLElement::class
): SimpleXMLElement|null
  • $node — le nœud DOM à importer. En pratique, il s'agit d'une instance de DOMNode, DOMElement ou DOMDocument. Si vous passez un DOMDocument, son élément document (la racine) est importé.
  • $class_name — une classe optionnelle qui étend SimpleXMLElement. L'objet retourné est une instance de cette classe, ce qui vous permet d'y associer vos propres méthodes utilitaires.

La fonction retourne un SimpleXMLElement en cas de succès, ou null si le nœud ne peut pas être importé. Cette fonction est disponible depuis PHP 5.1.3.

Importer un document entier

Le cas le plus courant est d'analyser ou de construire un document avec DOM, puis de passer la racine à SimpleXML pour une lecture facilitée :

<?php
$dom = new DOMDocument();
$dom->loadXML('<?xml version="1.0"?>
<book>
  <title>PHP Basics</title>
  <author>Jane Doe</author>
</book>');

$book = simplexml_import_dom($dom);

// Read with SimpleXML's property syntax instead of DOM method calls:
echo $book->title;   // PHP Basics
echo "\n";
echo $book->author;  // Jane Doe
?>

Passer l'objet $dom (un DOMDocument) importe son élément racine, de sorte que $book correspond à <book>. Comparez cela à l'équivalent DOM — $dom->getElementsByTagName('title')->item(0)->nodeValue — et l'attrait de SimpleXML devient évident.

Importer un seul élément construit manuellement

Vous pouvez également construire un nœud par programmation avec DOM et importer uniquement ce nœud :

php— editable, runs on the server

Ici, nous créons un élément <title>, le rattachons au document, et passons l'élément racine du document ($dom->documentElement) à simplexml_import_dom(). asXML() sérialise ensuite le SimpleXMLElement en chaîne de caractères.

Relation avec le reste de l'API SimpleXML

simplexml_import_dom() est l'inverse de dom_import_simplexml(), qui convertit un SimpleXMLElement en DOMElement. Ensemble, elles vous permettent de circuler librement entre les deux extensions :

Vous avezVous voulezUtilisez
Un nœud DOMUn SimpleXMLElementsimplexml_import_dom()
Un SimpleXMLElementUn DOMElementdom_import_simplexml()

Si vous partez d'une chaîne ou d'un fichier plutôt que d'un arbre DOM, vous n'avez généralement pas besoin de DOM du tout — utilisez directement simplexml_load_string() ou simplexml_load_file().

Pièges à éviter

  • Données sous-jacentes partagées. Le SimpleXMLElement retourné est une vue sur les mêmes données que celles référencées par le nœud DOM, et non une copie indépendante. Conservez l'objet DOM original dans la portée — s'il est collecté par le ramasse-miettes, le wrapper SimpleXML peut devenir inutilisable.
  • Une entrée invalide retourne null. Un retour null (ou, dans PHP 8+, une TypeError si l'argument n'est pas du tout un objet DOM) signale un échec — vérifiez toujours avant d'enchaîner des appels de méthodes.
  • La classe personnalisée doit étendre SimpleXMLElement. Passer un nom de classe non lié pour $class_name est une erreur ; la classe doit être une sous-classe.

Conclusion

simplexml_import_dom() vous permet d'effectuer un travail précis avec l'extension DOM, puis de lire ou sérialiser le résultat avec la syntaxe légère de SimpleXML. Elle se marie naturellement avec dom_import_simplexml() pour le trajet retour vers DOM. Lorsque vos données se trouvent déjà dans un arbre DOM, cette fonction est le moyen le plus propre de continuer avec un accès par propriété d'objet plutôt que des appels DOM verbeux.

Pratique

Pratique
Lesquelles des affirmations suivantes sont vraies concernant SimpleXML en PHP ?
Lesquelles des affirmations suivantes sont vraies concernant SimpleXML en PHP ?
Was this page helpful?