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 :

[XML] Parser du XML pour remplir une BDD SQL


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 26
    Points : 16
    Points
    16
    Par défaut [XML] Parser du XML pour remplir une BDD SQL
    Bonjour à tous!

    Je travaille à la conception d'une page php qui permettrait de remplir une base de donnée après avoir permis à l'utilisateur de choisir un fichier SGML sur son disque.

    J'ai pris connaissance des fonction pour parser telles que parse_into_struct mais j'aimerai récupérer des informations du SGML pour les envoyer à ma BDD via des insert, et là, je ne sais pas comment m'en sortir.

    Pour chaque balise je cherche à trouver:
    - la balise père
    - les noms des attributs et leur valeur
    - la valeur qu'elle contient, s'il y en a une (ou les caractères)

    Ma base de donnée est en effet structurée comme une énorme table de balises différenciées uniquement par leur ID et leur nom...mais je ne suis pas sûr que ce soit forcement le bon choix!
    En réalité, à terme, je vais opérer des recherches par requêtes qui doivent pouvoir se faire sur n'importe quelle balise, quelle que soit sa place hiérarchique, d'où ce choix d'architecture de la table...

    Auriez vous quelques conseils?

    Merci d'avance. Bonne journée.

  2. #2
    Membre expérimenté Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Points : 1 537
    Points
    1 537
    Par défaut
    salut,

    xml_parse_into_struct est extrêmement pratique, tu récupères toutes la structure de ton XML dans 2 tableaux (index/valeurs), logiquement juste avec cette méthode tu couvres 90% des cas ...
    normalement il faut éviter de l'utiliser sur les gros XML a cause de la double boucle et quand tu as besoin d'un max de vitesse et aussi d'utiliser un mini de ressources, mais dans tous les autres cas, faut pas s'en priver ...

    sinon tu te crées un analyseur XML : xml_parser_create

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    En réalité, xml_par_into_struct ne fonctionne pas sur les fichier un peu long, il s'arrête aux premières balises apparement... Donc il m'est impossible de l'utiliser.
    Je vais essayer de fouiller avec le parseur xml!
    Merci!

  4. #4
    Membre expérimenté Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Points : 1 537
    Points
    1 537
    Par défaut
    Citation Envoyé par LePueblo Voir le message
    En réalité, xml_par_into_struct ne fonctionne pas sur les fichier un peu long, il s'arrête aux premières balises apparement... Donc il m'est impossible de l'utiliser.
    testé de mon coté sur des XML de plusieurs Mo ... peut être est ce en rapport avec la structure de ton XML, elle est bien valide ?
    tu devrais mater les commentaires sur cette page, tu y trouveras un bon paquet d'infos utile : http://fr.php.net/manual/fr/function...nto-struct.php

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Okay, merci pour le lien. Le problème c'est que je ne peux pas modifier les fichiers que je parse, le but c'est de les comprendre tel quels.

    J'ai donc essayé sur un de mes fichiers SGML, je n'ai que quelques valeurs qui s'affichent...
    En réalité, les parseurs XML de PHP n'aiment pas les attributs qui ont des valeurs non entre parenthèse, ça les fait arrêter l'exécution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <infoarbre poscol=1 poslig=32 ident=624>
    est donc une ligne bloquante d'un fichier SGML.

    Mon fichier SGML ressemble à ça, il n'y a même pas d'en-tête:
    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
    42
    <act poscol=5 poslig=32 destc=5 destl=33 ident=522>
    <Operateur>
    <Affichage>
    <EffaceEcran>
    </EffaceEcran>
    </Affichage>
    </Operateur>
    <Operateur>
    <Affichage>
    <Paragraphe>
    <phrasext code="280" site="COMMUN">
    <Texte>+++
    </Texte>
    <Texte>+++
    </Texte>
    </phrasext>
    <TexteLibre>
    <Texte>.
    </Texte>
    </TexteLibre>
    </Paragraphe>
    </Affichage>
    <Affichage>
    <Paragraphe>
    <phrasext code="132" site="COMMUN">
    </phrasext>
    <phrasext code="281" site="COMMUN">
    </phrasext>
    <TexteLibre>
    <Texte>.
    </Texte>
    </TexteLibre>
    </Paragraphe>
    <CouleurPolice Rouge=0 Vert=128 Bleu=255>
    </CouleurPolice>
    </Affichage>
    </Operateur>
    <Operateur>
    <Validation nom="OK">
    </Validation>
    </Operateur>
    </act>
    J'essaie de trouver un façon d'écrire un parseur où chaque balise connaît sa balise père, mais j'ai du mal =)

  6. #6
    Membre expérimenté Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Points : 1 537
    Points
    1 537
    Par défaut
    c'est sur ... si le XML n'est pas valide, toutes les extensions de traitement du XML vont planter.
    si tu veux pas t'emmerder, traite le XML pour y corriger les erreurs de "

    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $XML = preg_replace("#([a-z0-9]+=)([0-9]+)#i", "\\1\"\\2\"", $XML);

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Très bonne idée! Merci, j'y avait même pas pensé, comme quoi on a tendance à se compliquer les choses...
    Du coup j'ai fait un preg_replace comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $test="<balise nom=developpez type=forum section="xml">Le SGML</balise>";
    echo $test;
    
    //si on a bien pris garde à enlever les balises <> qui aiment pas le html
    //on voit:
    //balise nom=developpez type=forum section="xml" Le SGML /balise
    
    $test=preg_replace('`=(([^" >])+)[ >]`','="$1" ' ,$test);
    echo $test;
    //on obtient:
    //balise nom="developpez" type="forum" section="xml" Le SGML /balise
    Il faut bien faire gaffe à pas agir sur les balises où il y a déjà des guillemets.
    Voilà merci encore Lorenzo77!!

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Petit post rectificatif, le masque précédent ne fonctionnant pas très bien.
    J'ai fait une fonction toute simple qui transforme le SGML en XML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function SGMLtoXML($phrase){
    		$phrase=preg_replace('`=(([^" >])+)[ ]`','="$1" ',$phrase);
    		$phrase=preg_replace('`=(([^">])+)[>]`','="$1">' ,$phrase);
    		return $phrase;
    }

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

Discussions similaires

  1. Parsing file xsls via PHP pour remplir une table SQL
    Par AliciaSH dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 10/05/2017, 17h16
  2. exécuté un fichier xml pour remplir une table
    Par secondechance dans le forum Bases de données
    Réponses: 0
    Dernier message: 17/01/2011, 14h59
  3. remplir une Bdd sql serveur a travers un formulaire Asp.net
    Par mead_Developper dans le forum ASP.NET
    Réponses: 9
    Dernier message: 28/05/2009, 11h36
  4. mapping d'un fichier xml pour générer une base SQL
    Par annir dans le forum XQUERY/SGBD
    Réponses: 1
    Dernier message: 09/09/2008, 09h32
  5. Comment extraire du xml pour faire une bdd avec php?
    Par baleiney dans le forum XQUERY/SGBD
    Réponses: 9
    Dernier message: 09/03/2008, 14h55

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