Vous êtes ici Codes PHP et MySQL > XML > Convertisseur de fichiers XML en Array

 

Convertisseur de fichiers XML en Array

Classe de parsing xml permettant de convertir l'arborescence d'un fichier XML en collection (Array à plusieurs dimensions), avec SimpleXML. Idéal pour l'utilisation de fichiers de configuration en XML.
 
napalm
Code vu 9552 fois
Enregistré le 21 Jan 2009
  • Digg ce code sur digg.com
  • Bookmark ce code sur del.icio.us
  • Bookmark ce code sur Google
  • Bookmark ce code sur Yahoo
  • Ajoute Convertisseur de fichiers XML en Array
  • Partage ce code sur Facebook
 
 
 
 

Code Source


01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
 
<?php
/******************************************************************************/
/*                                                                            */
/*                       __        ____                                       */
/*                 ___  / /  ___  / __/__  __ _____________ ___               */
/*                / _ \/ _ \/ _ \_\ \/ _ \/ // / __/ __/ -_|_-<               */
/*               / .__/_//_/ .__/___/\___/\_,_/_/  \__/\__/___/               */
/*              /_/       /_/                                                 */
/*                                                                            */
/*                                                                            */
/******************************************************************************/
/*                                                                            */
/* Titre          : Convertisseur de fichiers XML en Array                    */
/*                                                                            */
/* URL            : http://www.phpsources.org/scripts492-PHP.htm              */
/* Auteur         : napalm                                                    */
/* Date édition   : 21 Jan 2009                                               */
/*                                                                            */
/******************************************************************************/

/*
    Exemple d'utilisation :
        
    ***    fichier "xmlfile.xml" ***
    <rootElement>
        <database>
            <host>localhost</host>
            <identification mode="base64">
                <user>usr</user>
                <password>passwd</password>
            </identification>
        </database>
    </rootElement>
    
    *** Code PHP ***
    // Instanciation de l'objet
    $oTree = new XmlTree("xmlfile.xml");
    // Récupération des variables dans le fichier XML
    $strHost = $oTree->element("database", "host");
    $strUser = $oTree->element("database", "identification", "user");
    $strPass = $oTree->element("database", "identification", "password");
    $strMode = $oTree->element("database", "identification", "mode");
*/

class XmlTree {

    private $m_aCol;
    
    // Construction de l'objet en lui passant le fichier à parser
    public function __construct($strFileName){
        $this->m_aCol    = Array();
        $fXml            simplexml_load_file($strFileName);
        $this->m_aCol    $this->build($fXml$this->m_aCol);
    }
    
    // Fonction récursive de parcours du fichier XML
    private function build($oValues$aInput){
        foreach($oValues as $strKey=>$value){
            if($value->children() || $value->attributes() ){
                $aInput[$strKey] = Array(); 
// Initialize an array in current key
                if($value->attributes()){    
// Separate attributes from elements
                    $aInput[$strKey] = $this->build($value->attributes(), 
$aInput[$strKey]);
                }
                if($value->children()){
                    $aInput[$strKey] = $this->build($value->children(), $aInput[
$strKey]);
                }
            }else{
                $aInput[$strKey] = (String)$value// Cast SimpleXmlObject to a String
            }
        }
        return $aInput;
    }
    
    // Récupération d'un élément (nombre d'arguments illimité)
    public function element(){
        $nArgs func_num_args();
        if($nArgs == ){ return false; }
        $aOutput $this->m_aCol;
        for($i= ; $i<$nArgs $i++){
            if(isset($aOutput[func_get_arg($i)])){
                $aOutput $aOutput[func_get_arg($i)];
            }else{ return false; }
        }
        return $aOutput;
    }
    
}
?>

 

Fonctions du code

: Crée un tableau - (PHP 4, PHP 5)
: Convertit un fichier XML en objet - (PHP 5)
: Retourne le nombre d'arguments passés à la fonction - (PHP 4, PHP 5)
: Retourne un élément de la liste des arguments - (PHP 4, PHP 5)
: Détermine si une variable est affectée - (PHP 4, PHP 5)
Commentaires
Code intéréssant mais la classe ne permet pas de l'utiliser dans le cas ou un xml contient plusieurs noeud identifique.

la méthode element devrait plutôt renvoyer un tableau contenant la liste des noeuds voulut.
 
doc php
function xml2array($xml) {
    if(get_class($xml) != 'SimpleXMLElement') {
        if        (is_file($xml))    {    $xml = simplexml_load_file        ($xml);    }
        elseif    (is_string($xml))    {    $xml = simplexml_load_string    ($xml);    }
    }
    if(!$xml) {
        return false;
    }
    $main = $xml->getName();
    $arr  = array();
    $nodes = $xml->children();
    foreach($nodes as $node) {
        $nodeName        = $node->getName();
        $nodeAttributes  = $node->attributes();
        $attributesArray = array();
        foreach($nodeAttributes as $attributeName => $attributeValue) {
            $attributesArray[$attributeName] = (string) $attributeValue;
        }
        $nodeValue = sizeOf($node->children()) == 0 ? trim($node) : xml2array($node);
        if(!isSet($arr[$nodeName]['valeur'])) {
            $arr[$nodeName]['valeur']      = $nodeValue;
            $arr[$nodeName]['attributs'] = $attributesArray;
        } else {
            if(!is_array($arr[$nodeName]['valeur'])) {
                $arr[$nodeName]['valeur'][]      = array_shift($arr[$nodeName]);
                $arr[$nodeName]['attributs'][] = array_shift($arr[$nodeName]['attributs']);
            }
            $arr[$nodeName]['valeur'][]      = $nodeValue;
            $arr[$nodeName]['attributs'][] = $attributesArray;
        }
    }
    return($arr);
}
 
Ajouter un commentaire
Code de sécurité

Attention: Les champs marqués d'une étoile * sont obligatoires
 
Librairie PHP

Connexion

 
 

XML

 
 

PHP

 
 
 
Php 5 Livre PHP

Php 5
 
    Offres d'emploi

Plus de 500 offres d'emploi PHP/MySQL

Offres d'emploi
 
    Editeur PHP
 
        Publicité