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

XQUERY/SGBD XML Discussion :

Comment extraire du xml pour faire une bdd avec php?


Sujet :

XQUERY/SGBD XML

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 152
    Points : 66
    Points
    66
    Par défaut Comment extraire du xml pour faire une bdd avec php?
    Bonjour,
    je suis désolé de vous déranger avec un problème qui ne se règle certainement pas en 2 sec, mais j'ai un fichier xml qui contient plein de données, et j'aimerais en extraire les données avec php pour les insérer dans ma base de données. Le problème c'est que je ne connais rien à xml, y a-t-il un moyen rapide (avec des explode?) pour le faire (au moins un exemple pour une balise?svp )?
    En l'occurence toutes les données sont entre les balises <product> et </product>.
    Je vous remercie d'avance
    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
     
    - <product>
      <partnumber>001</partnumber> 
      <monde>Films DVD</monde> 
      <categorie>Comédie Humour</categorie> 
      <souscategorie>Tous nos films</souscategorie> 
      <nom>DUPONT</nom> 
      <marque>DVD</marque> 
      <prix base="Euro TTC">10</prix> 
      <disponibilite>En stock, expédié en 24h</disponibilite> 
    - <link>
    - <![CDATA[ http://www.monlien.fr/produit1.htm  ]]> 
      </link>
    - <moreinfo>
    - <![CDATA[ http://www.monlien.fr/produit1.htm?Product_ID=1 ]]> 
      </moreinfo>
    - <url_produit>
    - <![CDATA[ http://www.monlien.fr/produit1.htm ]]> 
      </url_produit>
    <url_stdimage>http://www.monlien.fr/images/produits/1.jpg</url_stdimage> 
       </product>
    - <product>
      <partnumber>002</partnumber> 
      <monde>Accessoires et consommables</monde> 
      <categorie>Câbles Parallèle / Série</categorie> 
      <souscategorie>Câbles Série</souscategorie> 
      <nom>DUPONT2</nom> 
      <marque>Inconnue</marque> 
      <prix base="Euro TTC">2.95</prix> 
      <disponibilite>En stock, expédié en 24h</disponibilite> 
    - <link>
    - <![CDATA[ http://www.monlien.fr/produit2.htm ]]> 
      </link>
    - <moreinfo>
    - <![CDATA[ http://www.monlien.fr/produit2.htm?Product_ID=2 ]]> 
      </moreinfo>
    - <url_produit>
    - <![CDATA[ http://www.monlien.fr/produit2.htm  ]]> 
      </url_produit>
      <url_stdimage>http://www.monlien.fr/images/produits/2.jpg</url_stdimage> 
      </product>

  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
    Des extensions sont prévues pour cela, mais dépendent de votre version de PHP :

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    J'ai exactement le même problème, est-ce que tu as réussi à trouver une solution?
    Si oui j'aimerais bien que tu m'aides >__<!

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 152
    Points : 66
    Points
    66
    Par défaut
    Non je ne vois pas,
    à part la méthode bourrin avec le bloc note mais c'est très très long et le résultat est pourri.
    Je serais prêt à payer pour avoir cette bdd en sql, je sais que ça ne se fait pas sur ce forum mais je n'ai malheureusement vraiment pas le temps de le faire moi-même...

  5. #5
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    Pour moi, la méthode la plus simple consisterait à appliquer une transformation XSL-T qui génèrera un fichier CSV à importer ou un fichier d'ordres INSERT à exécuter.

    Quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:for-each select="//product">
      <xsl:value-of select="concat(partnumber,';',mode,';',categorie,';',...)"/>
    </xsl:for-each>
    Quel est votre SGBD (quelle version?) ?

    De quelle version de PHP disposez-vous ?

    Est-ce à faire une seule fois ou périodiquement, automatiquement, ... ??
    Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 152
    Points : 66
    Points
    66
    Par défaut
    J'ai phpmyadmin version 2.7.0 et PHP Version 4.4.0-3ubuntu2 il s'agit plutôt d'une fois (ou deux éventuellement) mais pas plus, ce n'est pas nécessaire.

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 152
    Points : 66
    Points
    66
    Par défaut
    Bonjour, personne ne pourrait me dire comment utiliser la fonction que m'a proposé alain.couthures ?
    Je ne sais vraiment pas utiliser xml svp

  8. #8
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Points : 362
    Points
    362
    Par défaut
    Depuis le début de ton topic, t'aurais eu le temps de faire un petit script avec domxml : http://fr.php.net/domxml
    C'est pas bien dur quand c'est juste de la lecture d'un fichier XML

  9. #9
    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
    De plus, il faudrait sérieusement penser à migrer vers PHP 5 Surtout qu'avec SimpleXML ça devient un jeu d'enfant à écrire

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Youpiii j'ai réussi à faire marcher mon code!! Par contre j'ai un léger décalage au niveau du numéro de mot, mais ça c'est parce que mon fichier xml est pourri je pense! lol

    Donc déja voila a quoi ressemble mon xml :
    <ls:b type="paragraph" id="1" layer="100"><ls:b type="token" id="1">JOURNAL</ls:b> <ls:b type="token" id="2">DE</ls:b> <ls:b type="token" id="3">JAMES</ls:b> <ls:b type="token" id="4">DAVID</ls:b> <ls:b type="token" id="5">FORBES</ls:b> </ls:b>
    Et mon code :
    Code PHP : 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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    <?php
    //Création d'un nouveau document DOM
    $dom = new domDocument;
     
    //On charge le fichier xml
    $dom->load('tt_doc.xml');
     
    //Initialisation des variables
    $numpara = 0;
    $nummot = 0;
     
    //On se connecte à notre base de données
    $connexionMySQL = mysql_connect('localhost', 'root') or die("Impossible de se connecter"); 
    mysql_select_db('recitdevoyage') or die("pas possible de trouver la base");
     
    //On récupère tous les éléments dont la balise est 'b'
    $ls = $dom->getElementsByTagName('b');
     
    //Pour chaque balise trouvée
    foreach ($ls as $ls)
    {
    	//Le mot reçoit la première valeur contenue dans la balise "b"
    	$mot = $ls->firstChild->nodeValue;
     
    	// On cherche à récupérer les valeurs par rapport aux attributs
    	$value = $ls->getAttribute ('type');
    		//On incrémente le numéro de paragraphe à chaque fois qu'on trouve une valeur paragraphe
    		if ($value=="paragraph") {
    			$numpara = $numpara+1;
    		}
    		//On incrémente le numéro de mot à chaque fois qu'on trouve une valeur token
    		if ($value = 'token') {
    			$nummot = $nummot+1;
    		}				
     
    	//On insère dans les tables
    	$sql = "INSERT INTO Texte (numpara) VALUES('$numpara')";
    	$resultatRequete= mysql_query($sql,$connexionMySQL);
     
    	$sql2 = "INSERT INTO Mot (CEnumparaM, nummot, mot) VALUES('$numpara', '$nummot', '$mot')";
    	$resultatRequete= mysql_query($sql2,$connexionMySQL);
     
    	//On affiche le texte
    	echo $mot;
        echo " ";
    }
     
    //On ferme la connexion
    mysql_close();  
     
    ?>

Discussions similaires

  1. Questions pour faire une BDD en XML
    Par cortex59 dans le forum Android
    Réponses: 1
    Dernier message: 11/08/2012, 14h15
  2. comment configurer simpleCart.js pour faire une page e-commerce ???
    Par pampelline dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 01/12/2009, 21h45
  3. [XML] Parser du XML pour remplir une BDD SQL
    Par LePueblo dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 08/10/2008, 12h44
  4. Réponses: 5
    Dernier message: 06/02/2008, 16h01
  5. [LDAP] comment s'y prendre pour faire une recherche complexe
    Par dervish dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 10/03/2006, 14h56

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