Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > DOMXML
DOMXML Forum d'entraide pour l'extension DOMXML permettant de manipuler des documents XML en PHP 4 (approche DOM). Avant de poster -> tutoriels DOMXML
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/07/2007, 14h15   #1
Membre habitué
 
Homme Nicolas
Développeur informatique
Inscription : juillet 2007
Messages : 229
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : Luxembourg

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

Informations forums :
Inscription : juillet 2007
Messages : 229
Points : 137
Points : 137
Par défaut [DOMXML] 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 :
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>
npirard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/07/2007, 15h28   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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 :
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());
    }
}
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/07/2007, 15h47   #3
Membre habitué
 
Homme Nicolas
Développeur informatique
Inscription : juillet 2007
Messages : 229
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : Luxembourg

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

Informations forums :
Inscription : juillet 2007
Messages : 229
Points : 137
Points : 137
Merci.

Je peux normalement utiliser la version 2.4.
npirard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/07/2007, 16h30   #4
Membre habitué
 
Homme Nicolas
Développeur informatique
Inscription : juillet 2007
Messages : 229
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : Luxembourg

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

Informations forums :
Inscription : juillet 2007
Messages : 229
Points : 137
Points : 137
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

Citation:
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
npirard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 10h12   #5
Membre habitué
 
Homme Nicolas
Développeur informatique
Inscription : juillet 2007
Messages : 229
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : Luxembourg

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

Informations forums :
Inscription : juillet 2007
Messages : 229
Points : 137
Points : 137
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 :
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...
npirard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 11h57   #6
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 15h04   #7
Membre habitué
 
Homme Nicolas
Développeur informatique
Inscription : juillet 2007
Messages : 229
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : Luxembourg

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

Informations forums :
Inscription : juillet 2007
Messages : 229
Points : 137
Points : 137
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
npirard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2008, 15h44   #8
Membre habitué
 
Inscription : mars 2006
Messages : 395
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 395
Points : 128
Points : 128
Salut à tous,

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

Merci pour votre aide.
Go_Ahead est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h39.


 
 
 
 
Partenaires

Hébergement Web