Lors du développement d'applications Web, il est souvent nécessaire d'obtenir des données XML provenant de sources externes et de les traiter. Plusieurs fois, nous devons convertir ces données XML en tableaux PHP pour faciliter l'ajout, la modification, la suppression ou l'accès aux données.
En PHP, nous pouvons utiliser la bibliothèque de fonctions SimpleXML pour analyser et manipuler des fichiers XML, et nous pouvons également utiliser la bibliothèque de fonctions DOM pour accomplir la même tâche. Cependant, cet article se concentrera sur la façon d'utiliser la bibliothèque SimpleXML pour convertir un fichier XML en tableau PHP.
Avant de convertir le fichier XML en tableau PHP, nous devons d'abord charger le fichier XML. Cela peut être fait via le constructeur de la classe SimpleXMLElement, comme indiqué ci-dessous :
$xml = new SimpleXMLElement('filename.xml', null, true);
Ici, le premier paramètre est le chemin d'accès au fichier XML, le deuxième paramètre spécifie les options du fichier XML et le troisième paramètre indique s'il faut activer la prise en charge des espaces de noms.
Une fois le fichier XML chargé, nous pouvons le convertir en tableau PHP en utilisant les méthodes fournies par la bibliothèque SimpleXML. Tout d’abord, nous devons créer un tableau vide pour contenir les données XML. Nous pouvons ensuite obtenir tous les nœuds enfants du nœud actuel en utilisant la méthode children() de la classe SimpleXMLElement comme indiqué ci-dessous :
$array = array(); foreach ($xml->children() as $element) { $name = $element->getName(); $attributes = $element->attributes(); if (!$attributes) { if (!isset($array[$name])) { $array[$name] = (string) $element; } else { if (!is_array($array[$name])) { $array[$name] = array($array[$name]); } $array[$name][] = (string) $element; } } else { $array[$name][] = array(); foreach ($attributes as $attrName => $attrValue) { $array[$name][count($array[$name])-1]['_'.$attrName] = (string) $attrValue; } if ($element->children()) { $array[$name][count($array[$name])-1] = array_merge($array[$name][count($array[$name])-1],$this->xml2array($element)); } else { $array[$name][count($array[$name])-1]['value'] = (string) $element; } } }
Ici, nous utilisons une boucle foreach pour parcourir tous les nœuds enfants et obtenir le nom et les attributs de chaque nœud enfant. Pour les nœuds sans nœuds enfants, nous enregistrerons leur contenu comme valeur du tableau, et son nom est le nom du nœud ; pour les nœuds avec des nœuds enfants, la fonction xml2array() est appelée de manière récursive pour convertir ses nœuds enfants en tableaux, puis Ces tableaux sont fusionnés dans le tableau du nœud actuel.
Après la conversion des données XML en tableaux PHP, le tableau de sortie peut nécessiter un traitement supplémentaire pour mieux répondre à nos besoins. Par exemple, nous devrons peut-être stocker toutes les propriétés dans des tableaux séparés ou modifier la structure du tableau pour mieux répondre aux besoins de l'application. Voici quelques opérations de rangement courantes que vous pourriez vouloir effectuer :
function xml2array($xml) { $array = array(); foreach ($xml->children() as $element) { $name = $element->getName(); $attributes = $element->attributes(); if (!$attributes) { if (!isset($array[$name])) { $array[$name] = (string) $element; } else { if (!is_array($array[$name])) { $array[$name] = array($array[$name]); } $array[$name][] = (string) $element; } } else { $array[$name][] = array('_attributes' => array()); foreach ($attributes as $attrName => $attrValue) { $array[$name][count($array[$name])-1]['_attributes'][$attrName] = (string) $attrValue; } if ($element->children()) { $array[$name][count($array[$name])-1] = array_merge($array[$name][count($array[$name])-1],$this->xml2array($element)); } else { $array[$name][count($array[$name])-1]['value'] = (string) $element; } } } return $array; }
function xml2array($xml) { $array = array(); foreach ($xml->children() as $element) { $name = $element->getName(); $attributes = $element->attributes(); if (!$attributes) { if (!isset($array[$name])) { $array[$name] = (string) $element; } else { if (!is_array($array[$name])) { $array[$name] = array($array[$name]); } $array[$name][] = (string) $element; } } else { $node = array( '_name' => $name, '_value' => (count($element->children()) == 0) ? (string) $element : null, '_attributes' => array(), '_children' => array() ); foreach ($attributes as $attrName => $attrValue) { $node['_attributes'][$attrName] = (string) $attrValue; } foreach ($element->children() as $childElement) { $childNode = $this->xml2array($childElement); $childName = $childElement->getName(); if (count($childNode) == 1) { $node['_children'][$childName] = reset($childNode); } else { $node['_children'][$childName][] = $childNode; } } if (!isset($array[$name])) { $array[$name] = $node; } else { if (!is_array($array[$name])) { $array[$name] = array($array[$name]); } $array[$name][] = $node; } } } return $array; }
Ici, lors du traitement d'un nœud, un nouveau tableau est créé contenant les quatre éléments suivants : nom, valeur, attribut et nœud enfant. Cela permet au tableau de sortie d'être facilement mappé dans une table de base de données, un attribut de classe ou une autre structure de données.
Résumé
La conversion de fichiers XML en tableaux PHP en PHP peut être réalisée via la bibliothèque de fonctions SimpleXML. Vous pouvez utiliser la méthode children() de la classe SimpleXMLElement pour parcourir l'arborescence XML et enregistrer les données à l'aide d'un tableau PHP. Une fois converties en tableau PHP, les données peuvent être traitées ultérieurement pour un accès et une manipulation faciles.
Ce qui précède est ce que présente cet article. J'espère qu'il vous sera utile pour utiliser PHP pour traiter les fichiers XML dans le développement Web.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!