Maison > développement back-end > Problème PHP > Comment convertir XML en tableau en php

Comment convertir XML en tableau en php

PHPz
Libérer: 2023-04-26 18:12:58
original
732 Les gens l'ont consulté

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.

  1. Chargement du fichier XML

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);
Copier après la connexion

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.

  1. Convertir XML en tableau

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;
        }
    }
}
Copier après la connexion

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.

  1. Organisation des tableaux

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 :

  • Stockez toutes les propriétés dans des tableaux séparés :
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;
}
Copier après la connexion
  • Modifiez la structure du tableau pour mieux répondre aux besoins de votre application :
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;
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal