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 habitué
    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
    Points : 179
    Points
    179
    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
    Expert éminent sénior

    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
    Points : 17 778
    Points
    17 778
    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 habitué
    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
    Points : 179
    Points
    179
    Par défaut
    Merci.

    Je peux normalement utiliser la version 2.4.

  4. #4
    Membre habitué
    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
    Points : 179
    Points
    179
    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 habitué
    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
    Points : 179
    Points
    179
    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
    Expert éminent sénior

    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
    Points : 17 778
    Points
    17 778
    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 habitué
    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
    Points : 179
    Points
    179
    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 habitué
    Inscrit en
    Mars 2006
    Messages
    408
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 408
    Points : 173
    Points
    173
    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