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 :

[DOM XML] Parser un fichier XML pour insertion dans la base


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 244
    Par défaut [DOM XML] Parser un fichier XML pour insertion dans la base
    Bonjour,

    je souhaiterais, à l'aide de php4.2, parser un fichier xml (voir ci-dessous) pour pouvoir l'nsérer dans ma DB mySQL. Quelqu'un sait-il m'aider ? Merci

    Ma DB (test possède 2 tables => cds et cdrr).

    XML

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?xml version="1.0" encoding="UTF-8"?>
    <SYNCHRONISATION DATE="070630120000">
    <TABLE NAME="cds">
    	<row>
    		<column name="titel">1</column>
    		<column name="interpret">1</column>
    		<column name="jahr">1</column>
    	</row>
    </TABLE>
    <TABLE NAME="cdrr">
    	<row>
    		<column name="nom">1</column>
    	</row>
    </TABLE>
    </SYNCHRONISATION>

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    PHP 4 donc c'est l'extension DOMXML ou XML (SAX).

    En revanche, l'extension DOMXML ayant été énormément retravaillée à la version 4.3.0, ça va être coton pour adapter ...

    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
    <?php
    function joinsqlkv($array) {
        $str = '';
        foreach ($array as $k => $v) {
            if (!is_array($v)) { // Non géré
                if (empty($str)) {
                    $str .= $k . ' = \'' . mysql_real_escape_string($v) . '\'';
                } else {
                    $str .= ', ' . $k . ' = \'' . mysql_real_escape_string($v) . '\'';
                }
            }
        }
        return $str;
    }
     
    mysql_connect('localhost', 'julp', '*****');
    mysql_select_db('dvp');
     
    $dom = domxml_open_file('fichier.xml', DOMXML_LOAD_DONT_KEEP_BLANKS);
    $sync = $dom->document_element();
    foreach ($sync->child_nodes() as $table) {
        $colonnes = array();
        foreach ($table->child_nodes() as $row) {
            foreach ($row->child_nodes() as $col) {
                $colonnes[$col->get_attribute('name')] = $col->get_content();
            }
            mysql_query(sprintf('INSERT INTO %s SET %s', $table->get_attribute('NAME'), joinsqlkv($colonnes))) or die(mysql_error());
        }
    }

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 244
    Par défaut
    Merci.

    Je peux normalement utiliser la version 2.4.

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 244
    Par défaut
    Un autre petit souci. Pour l'instant, j'utilise php 4.4

    J'ai des erreurs car il dit que mon apache (XAMPP) ne connait pas les fonctions DOMXML

    Fatal error: Call to undefined function: domxml_new_doc()
    Comment puis je faire ? Mon apache tourne bien en PHP 4 aussi...

    Edit : Résolu pour cette partie ci. je teste le code dessus.

    Merci

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 244
    Par défaut
    Citation Envoyé par julp
    PHP 4 donc c'est l'extension DOMXML ou XML (SAX).

    En revanche, l'extension DOMXML ayant été énormément retravaillée à la version 4.3.0, ça va être coton pour adapter ...

    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
    <?php
    function joinsqlkv($array) {
        $str = '';
        foreach ($array as $k => $v) {
            if (!is_array($v)) { // Non géré
                if (empty($str)) {
                    $str .= $k . ' = \'' . mysql_real_escape_string($v) . '\'';
                } else {
                    $str .= ', ' . $k . ' = \'' . mysql_real_escape_string($v) . '\'';
                }
            }
        }
        return $str;
    }
     
    mysql_connect('localhost', 'julp', '*****');
    mysql_select_db('dvp');
     
    $dom = domxml_open_file('fichier.xml', DOMXML_LOAD_DONT_KEEP_BLANKS);
    $sync = $dom->document_element();
    foreach ($sync->child_nodes() as $table) {
        $colonnes = array();
        foreach ($table->child_nodes() as $row) {
            foreach ($row->child_nodes() as $col) {
                $colonnes[$col->get_attribute('name')] = $col->get_content();
            }
            mysql_query(sprintf('INSERT INTO %s SET %s', $table->get_attribute('NAME'), joinsqlkv($colonnes)));
        }
    }
    Un petit souci.
    Malgré que je passe plusieurs fois dans la boucle (avec des valeurs xml différentes), seulement 1 seul INSERT est effectué. pq?

    1 seul INSERT par table, car avec le code présenté dessus, cela fonctionne, mais si il y a plusieurs "Row" cela ne fonctionne pas...

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Citation Envoyé par npirard
    Malgré que je passe plusieurs fois dans la boucle (avec des valeurs xml différentes), seulement 1 seul INSERT est effectué. pq?
    Parce qu'il y a une erreur côté SGBD ? Il faudrait ajouter or die(mysql_error()); à mysql_query.

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 244
    Par défaut
    Merci, tout fonctionne.

    Parsage de mon fichier XML, Récupération de tt mes données et même création d'un fichier XML à partir de ma DB

  8. #8
    Membre éclairé
    Inscrit en
    Mars 2006
    Messages
    408
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 408
    Par défaut
    Salut à tous,

    Quelqu'un pourrait me dire ce que donnerait ce code en PHP5 ??

    Merci pour votre aide.

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

Discussions similaires

  1. [DOM] [XSL] Convertir un fichier XML vers un fichier CSS
    Par Invité dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 23/03/2007, 10h49
  2. [XSLT] transfo d'un fichier XML en plusieurs fichiers XML
    Par doudou_rennes dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 28/11/2006, 12h01
  3. [XSLT]transformer un fichier XML en en fichier XML
    Par alexandra dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 16/08/2006, 14h26
  4. Réponses: 4
    Dernier message: 31/07/2006, 09h31
  5. [XML] Parser un fichier XML - SimpleXML
    Par Pepe67 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 05/07/2006, 11h39

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