IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[SimpleXML] Lister les éléments d'un XML en vu d'une conversion MySQL


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 69
    Points : 53
    Points
    53
    Par défaut [SimpleXML] Lister les éléments d'un XML en vu d'une conversion MySQL
    Bonjour,

    Je me tourne une fois de plus vers vous pour une petite difficulté.


    Je souhaite convertir un fichier xml en BDD MySQL, je l'ai déjà fait avec un fichier relativement léger dont j'ai manuellement référencé les différents éléments (il n'y a pas d'imbrication) pour remplir les colonnes.

    Mais là j'ai un fichier de plus de 200Mo avec bien plus d’éléments (balises), je souhaiterais donc trouver une fonction qui me permettra de les lister pour ensuite créer les colonnes et faire mon importation avec simplexml.

    Je suis aussi ouvert à d'autre suggestions pour l'importation mais restez simple svp avec le vocabulaire.

    Petit exemple basique pour bien comprendre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <bateau>
    	<couleur>bleu</couleur>
    	<longueur>10</longueur>
    	<mat>1</mat>
    </bateau>
    <bateau>
    	<couleur>rouge</couleur>
    	<longueur>10</longueur>
    	<moteur>1</moteur>
    </bateau>
    <bateau>
    	<couleur>blanc</couleur>
    	<longueur>15</longueur>
    </bateau>
    <bateau>
    	<couleur>rouge</couleur>
    	<longueur>50</longueur>
    	<mat>3</mat>
    	<canot>1</canot>
    </bateau>
    Là je vais donc créer la table "bateau", avec les colonnes couleur, longueur, mat, canot. Une ligne par "bateau", les colonne à NULL quand il n'y a aucune donnés correspondante dans le XML. Je veux savoir quel sont tous les sous élément de bateau pour créer les colonne de la BDD.


    Voilà j'espère avoir été compréhensible.

    Merci d'avance.

  2. #2
    Membre régulier Avatar de Chris_Dupasquier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2010
    Messages : 67
    Points : 85
    Points
    85
    Par défaut
    Hello,

    Si tu veux créer un base de données via du xml, il va falloir "extraire" les noeuds de ton xml. Pour ce faire je te propose cette solution en corrélation avec ton xml que tu nous a donné.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <bateau>
    	<couleur>bleu</couleur>
    	<longueur>10</longueur>
    	<mat>1</mat>
    </bateau>
    <bateau>
    	<couleur>rouge</couleur>
    	<longueur>10</longueur>
    	<moteur>1</moteur>
    </bateau>
    <bateau>
    	<couleur>blanc</couleur>
    	<longueur>15</longueur>
    </bateau>
    <bateau>
    	<couleur>rouge</couleur>
    	<longueur>50</longueur>
    	<mat>3</mat>
    	<canot>1</canot>
    </bateau>
    Voila la fonction que je te propose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function readerXml() {
     
    $bateau = new SimpleXMLElement($xmlstr);
     
    /* Accès au noeud <couleur> des <bateau>. */
    $i = 0;
    foreach ($bateau->bateau[$i]->couleur as $couleur) {
     
    //ICI Insertion dans la base de données en sachant que le bateau sera 0 puis incrémenté.
     
    $i ++
        }
    }
     
    }
    Ceci étant un exemple, tu devras le remodeler à ta sauce pour qu'il soit fonctionnel. Mais dans l'ensemble je pense qu'il devrait être à la hauteur...

    A+
    La logique est une manière méthodique de se tromper en toute confiance.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 69
    Points : 53
    Points
    53
    Par défaut
    Bonjour,


    Ce n'est pas ce que j'ai demandé, comme je l'ai dis je sais déjà extraire les données, je veux justement lister les "nœuds".

    Accéder au "nœuds" "bateau" tu peux me le suggérer car l'exemple que j'ai donné fait 20 lignes, mais si je montre un fichier de 3 millions de lignes ca va être plus tendu de me lister les ""nœuds" d'un simple coup d’œil.

  4. #4
    Membre régulier Avatar de Chris_Dupasquier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2010
    Messages : 67
    Points : 85
    Points
    85
    Par défaut
    Hello,

    Autant pour moi, pas bien compris la question.

    Je te propose en lien un document bien fait sur les possibilité de travail sur les noeuds ici y trouveras tu peut-être une piste.

    A+
    La logique est une manière méthodique de se tromper en toute confiance.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 69
    Points : 53
    Points
    53
    Par défaut
    Le document ne m'aide beaucoup, à la page 17 est évoqué DomNodeList, mais le seul bout de code donné c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nodeList;//objet de type DomNodeList;
    Ce qui aurai été intéressant c'est comment obtenir les donnés dans cette variable, pas juste comment l'exploiter avec un foreach :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach($nodeList as $node){
        print_r($node);
    }
    J'ai regardé la doc DOMNodeList mais je ne comprend rien. J'ai regardé particulièrement l'exemple de nascoedu du 18-Sep-2008 08:44.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /*now get the nodes in a DOMNodeList:*/
    $nodeList = $xPath->query($anXPathExpr);
    Mais je ne comprend pas ce qu'il faut définir dans $anXPathExpr (j'ai essayé de mettre le nom du nœud principal).

    J'ai essayé de m'appuyer sur cette source mais je ne comprend pas.

    Là je part dans toute les directions j'ai encore plus de questions qu'au départ, j'ai besoin d'aide, d'un exemple, d'un bout de code, une fonction, s'il me suffisait de lire de la doc je ne serais pas là

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    il faut faire quelque chose dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    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
    <?php
     
    $xml =
    <<<XML
    <data>
        <bateau>
            <couleur>bleu</couleur>
            <longueur>10</longueur>
            <mat>1</mat>
        </bateau>
        <bateau>
            <couleur>rouge</couleur>
            <longueur>10</longueur>
            <moteur>1</moteur>
        </bateau>
        <bateau>
            <couleur>blanc</couleur>
            <longueur>15</longueur>
        </bateau>
        <bateau>
            <couleur>rouge</couleur>
            <longueur>50</longueur>
            <mat>3</mat>
            <canot>1</canot>
        </bateau>
    </data>
    XML;
     
    /** @var SimpleXMLElement */
    $dom   = new SimpleXMLElement($xml);
    $props = array();
     
    foreach($dom->children() as $node) {
        foreach($node->children() as $k => $n) {
            $props[$k] = null;
        }
    }
     
    print_r(array_keys($props)); // couleur longueur mat moteur canot
     
    ?>

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 69
    Points : 53
    Points
    53
    Par défaut
    Yes, merci beaucoup c'est tout simplement parfait, et super rapide en plus.

    J'ai obtenu 326 éléments, c'est bien plus que ce que je pensais ^_^' Ca va faire beaucoup de colonnes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CAML] Lister les éléments d'une liste liée par un lookup field
    Par nicolas.pied dans le forum Développement Sharepoint
    Réponses: 1
    Dernier message: 22/09/2009, 08h30
  2. Lister les éléments d'un champ avec une formule
    Par noob77 dans le forum SAP Crystal Reports
    Réponses: 10
    Dernier message: 26/05/2009, 11h46
  3. lister les éléments d'une IHM
    Par tortuegenie dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 07/09/2007, 14h02
  4. [Excel] Lister les éléments distincts d'une colonne
    Par GnarlyYoyo dans le forum Excel
    Réponses: 2
    Dernier message: 30/12/2006, 10h00
  5. Lister les éléments d'un tableau
    Par uado dans le forum ASP
    Réponses: 8
    Dernier message: 22/05/2006, 12h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo