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

XSL/XSLT/XPATH XML Discussion :

[xslt]XML vers Mysql


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut [xslt]XML vers Mysql
    Bonjour,
    On m'a envoyé un export XML d'un logiciel et je dois remplir une base Mysql avec (Langage : Php4.4.4-8).
    Le fichier se présente comme ceci:

    <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
    <?xml-stylesheet type="text/xsl"?>
    <!DOCTYPE datafile [
    <!ENTITY title "Export File XML">
    <!ELEMENT datafile (datarecord*)>
    <!ATTLIST datafile
    gst_pays CDATA #FIXED "FRA "
    gst_devise CDATA #FIXED "EUR "
    gst_lang CDATA #FIXED "FRA "
    gst_target CDATA #FIXED "0 "
    gst_imgfmt CDATA #FIXED "JPG ">

    <!ELEMENT datarecord EMPTY>
    <!ATTLIST datarecord
    o_type CDATA #IMPLIED
    o_ref CDATA #IMPLIED
    o_pseudo CDATA #IMPLIED
    o_nego CDATA #IMPLIED
    o_caract CDATA #IMPLIED
    o_categ CDATA #IMPLIED
    >
    ]>

    <datafile gst_pays ="FRA " gst_devise ="EUR " gst_lang ="FRA " gst_target ="0 " gst_imgfmt ="JPG ">
    <datarecord O_TYPE="M" O_REF="31109" O_PSEUDO="PERROT Jules" O_NEGO="J P" />
    </datafile>

    Quelqu'un a une idée?
    merci d'avance

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Bonjour tiyo97,

    Tu veux quoi au juste.

    Ce qui tu nous donne ici c'est une description DTD d'un fichier XML. Donc tu a le corps ou bien l'allure de ta base de données.

    Sinon, je ne vois pas trop qu'est ce que tu veux (ou quel est le problème).

  3. #3
    Candidat au Club
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    je dois exporter la base de données d'un logiciel pour la mettre sur un site internet. le seul export valable est en xml et c'est le fichier qui est la avec 1 seule article (la personne qui s'est chargé de faire l'export n'en a pris qu'un...).

    Je voudrais savoir comment je peux faire pour recuperer les valeurs contenues dans :
    <datafile gst_pays ="FRA " gst_devise ="EUR " gst_lang ="FRA " gst_target ="0 " gst_imgfmt ="JPG ">
    <datarecord O_TYPE="M" O_REF="31109" O_PSEUDO="PERROT Jules" O_NEGO="J P" />
    </datafile>


    les mettre dans un array par exemple et ensuite je me debrouille. sachant qu'il y aura beaucoup plus d'enregistrements

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Voilà pour récupérer ces valeurs (les valeurs des attributs enfin) de ces tags, tu peux mettre :

    <xsl:value-of select="/datafile/@gst_pays/>
    ...
    Pour l'affichage des attribut de la balise datafile
    ...
    <xsl:value-of select="/datafile/@gst_imgfmt/>

    de même pour la balise datarecord,


    <xsl:value-of select="/datarecord/datafile/@O_TYPE/>
    ...
    Pour l'affichage des attribut de la balise datafile
    ...
    <xsl:value-of select="/datarecord/datafile/@O_NEGO/>


    Si tu a beaucoup d'enregistrement, tu peux utiliser la fonction <xsl:for-each select="chemein">


    Tu met le tout dans une balises table pour avoir le résultat dans un tableau:

    <table border="1" cellspacing="0" cellpadding="3">
    <tr> <!-- ligne 1-->
    <td>colonne 1</td>
    <td>colonne 2 </td>
    </tr>
    <tr><!-- ligne 2-->
    <td>
    </td>
    </tr>

    etc ...
    </table>


    J'ai pas encore compris ton soucis, j'espère que j'ai répondu

  5. #5
    Candidat au Club
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    oki je commence a comprendre le truc lol
    donc si je dois afficher je fais quelque chose comme: (affichage simple)
    <xsl:for-each select="/datarecord/datafile/">
    <xsl:value-of select="@gst_pays"/><br />
    <xsl:value-of select="@gst_imgfmt"/><br />
    ...
    </xsl:for-each>

    et si je veux pouvoir mettre ces valeurs dans un tableau php comment je peux faire?

  6. #6
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 19
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par tiyo97
    oki je commence a comprendre le truc lol
    donc si je dois afficher je fais quelque chose comme: (affichage simple)
    <xsl:for-each select="/datarecord/datafile/">
    <xsl:value-of select="@gst_pays"/><br />
    <xsl:value-of select="@gst_imgfmt"/><br />
    ...
    </xsl:for-each>

    et si je veux pouvoir mettre ces valeurs dans un tableau php comment je peux faire?
    En fait, en PHP, tu peux parser le fichier XML et lire ce que tu veux en utilisant la classe DOM XML (pour php4).

  7. #7
    Candidat au Club
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Tu parle de l'extension php_domxml?
    elle est pas installé sur le serveur...je vais voir si c'est possible de l'installer (ca m'etonnerai...). y'aurait il une autre methode?

  8. #8
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 19
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par tiyo97
    Tu parle de l'extension php_domxml?
    elle est pas installé sur le serveur...je vais voir si c'est possible de l'installer (ca m'etonnerai...). y'aurait il une autre methode?
    Normalement n'importe quel parseur xml ferait l'affaire, et ca m'étonnerait si aucun support pour le xml n'est fourni sur ton serveur!

  9. #9
    Candidat au Club
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci pour vos reponses ca m'a bien aidé ^^
    J'ai trouvé un script sur http://www.phpfreaks.com
    xml -> array php

    <?php

    XML Parser Class
    by Eric Rosebrock
    <?php
    /*http://www.phpfreaks.com

    Class originated from: kris@h3x.com AT: http://www.devdump.com/phpxml.php

    Usage:


    include 'clsParseXML.php';

    $xmlparse = &new ParseXML;
    $xml = $xmlparse->GetXMLTree('XPT_9583.xml');

    echo "<pre>";
    print_r($xml);
    echo "</pre>";


    The path to the XML file may be a local file or a URL.
    Returns the elements of the XML file into an array with
    it's subelements as keys and subarrays.

    */

    class ParseXML{
    function GetChildren($vals, &$i) {
    $children = array(); // Contains node data
    if (isset($vals[$i]['value'])){
    $children['VALUE'] = $vals[$i]['value'];
    }

    while (++$i < count($vals)){
    switch ($vals[$i]['type']){

    case 'cdata':
    if (isset($children['VALUE'])){
    $children['VALUE'] .= $vals[$i]['value'];
    } else {
    $children['VALUE'] = $vals[$i]['value'];
    }
    break;

    case 'complete':
    if (isset($vals[$i]['attributes'])) {
    $children[$vals[$i]['tag']][]['ATTRIBUTES'] = $vals[$i]['attributes'];
    $index = count($children[$vals[$i]['tag']])-1;

    if (isset($vals[$i]['value'])){
    $children[$vals[$i]['tag']][$index]['VALUE'] = $vals[$i]['value'];
    } else {
    $children[$vals[$i]['tag']][$index]['VALUE'] = '';
    }
    } else {
    if (isset($vals[$i]['value'])){
    $children[$vals[$i]['tag']][]['VALUE'] = $vals[$i]['value'];
    } else {
    $children[$vals[$i]['tag']][]['VALUE'] = '';
    }
    }
    break;

    case 'open':
    if (isset($vals[$i]['attributes'])) {
    $children[$vals[$i]['tag']][]['ATTRIBUTES'] = $vals[$i]['attributes'];
    $index = count($children[$vals[$i]['tag']])-1;
    $children[$vals[$i]['tag']][$index] = array_merge($children[$vals[$i]['tag']][$index],$this->GetChildren($vals, $i));
    } else {
    $children[$vals[$i]['tag']][] = $this->GetChildren($vals, $i);
    }
    break;

    case 'close':
    return $children;
    }
    }
    }

    function GetXMLTree($xmlloc){
    if (file_exists($xmlloc)){
    $data = implode('', file($xmlloc));
    } else {
    $fp = fopen($xmlloc,'r');
    while(!feof($fp)){
    $data = $data . fread($fp, 1024);
    }

    fclose($fp);
    }

    $parser = xml_parser_create('ISO-8859-1');
    xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
    xml_parse_into_struct($parser, $data, $vals, $index);
    xml_parser_free($parser);

    $tree = array();
    $i = 0;

    if (isset($vals[$i]['attributes'])) {
    $tree[$vals[$i]['tag']][]['ATTRIBUTES'] = $vals[$i]['attributes'];
    $index = count($tree[$vals[$i]['tag']])-1;
    $tree[$vals[$i]['tag']][$index] = array_merge($tree[$vals[$i]['tag']][$index], $this->GetChildren($vals, $i));
    } else {
    $tree[$vals[$i]['tag']][] = $this->GetChildren($vals, $i);
    }
    return $tree;
    }
    }

  10. #10
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2006
    Messages : 36
    Points : 34
    Points
    34
    Par défaut
    J'ai la même problématique, c'est-à-dire récupérer les informations de fichiers xml (générés par une appli embarquée) et les insérer dans une base MySQL (pour une appli backoffice en java).
    J'ai compris qu'on peut générer les requètes grâce à un fichier xsl comme par exemple (repris d'un autre post) :

    <articles>
    <article>
    <nom>tutu</nom>
    <id>0</id>
    </article>
    <article>
    <nom>titi</nom>
    <id>1</id>
    </article>
    </articles>
    <xsl:stylesheet version="1.0" xmlnssl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>

    <xsl:template match="/">
    <xsl:apply-templates select="//article"/>
    </xsl:template>

    <xsl:template match="article">
    <xsl:text>insert into article (id, lib) values(</xsl:text>
    <xsl:value-of select="./id"/>
    <xsl:text>,'</xsl:text>
    <xsl:value-of select="./nom"/>
    <xsl:text>');&#xA;</xsl:text>
    </xsl:template>

    </xsl:stylesheet>
    mais ensuite comment je peux parser ce xsl pour obtenir les requètes sql ? (en java si possible).

    Merci

    Réussi avec Xalan

  11. #11
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut xsl to sql
    salut,
    j'ai un soucis avec ce type de xslt...j'ai tenté d'adapter ton exemple a mon fichier XML et j'ai bien une sortir sql avec des insert into...mais sans valeurs. Tu peux me filer un couop de main?

    voici le xslt:
    <xsl:stylesheet version="1.0" xmlnssl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>

    <xsl:template match="/">
    <xsl:apply-templates select="//formdescriptor"/>
    </xsl:template>

    <xsl:template match="field">
    <xsl:text>insert into aitor (name, help, value, type) values(</xsl:text>
    <xsl:value-of select="./field"/>
    <xsl:text>,'</xsl:text>
    <xsl:value-of select="./help"/>
    <xsl:text>,'</xsl:text>
    <xsl:value-of select="./value"/>
    <xsl:text>,'</xsl:text>
    <xsl:value-of select="./type"/>
    <xsl:text>');&#xA;</xsl:text>
    </xsl:template>
    </xsl:stylesheet>


    et voici le xml:

    <formdescriptor>
    <field name="T1 Normal variants" help="Do the T1 images show normal variants?" value="No" type="YesNo" />
    <field name="T1 Lesions" help="Do the T1 images show lesions?" value="No" type="YesNo" />
    <field name="T1 SNR" help="Overall SNR T1 weighted images 0=bad 1=acceptable 2=good" value="2" type="Range" />
    <field name="T1 CNR" help="Overall CNR T1 weighted images 0=bad 1=acceptable 2=good" value="2" type="Range" />
    <field name="T1 Full Brain Coverage" help="Is the whole brain visible in T1?" value="Yes" type="YesNo" />
    <field name="T1 Misalignment" help="Does the T1 show misalignment?" value="No" type="YesNo" />
    <field name="T1 Swap / Wrap Around" help="Does the image show swap / wrap around in T1?" value="No" type="YesNo" />
    <field name="T1 Ghosting / Motion" help="Are there motion artifacts in the T1 image?" value="No" type="YesNo" />
    <formdescriptor>

    j'ai ce resultat apres xslproc...

    insert into aitor (name, help, value, type) values(,',','');
    insert into aitor (name, help, value, type) values(,',','');
    insert into aitor (name, help, value, type) values(,',','');
    insert into aitor (name, help, value, type) values(,',','');

    d'avance merci
    Luis

  12. #12
    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
    Essayez plutôt quelque chose comme
    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
     <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
            <xsl:output method="text"/>
     
    <xsl:template match="/">
     <xsl:apply-templates select="//field"/>
    </xsl:template>
     
    <xsl:template match="field">
            <xsl:text>insert into aitor (name, help, value, type) values(</xsl:text>
            <xsl:value-of select="@name"/>
            <xsl:text>,'</xsl:text>
            <xsl:value-of select="@help"/>
            <xsl:text>,'</xsl:text>
            <xsl:value-of select="@value"/>
            <xsl:text>,'</xsl:text>
            <xsl:value-of select="@type"/>
            <xsl:text>');&#xA;</xsl:text>
    </xsl:template>
    </xsl:stylesheet>
    Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/

  13. #13
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut xml to sql
    Ho...yes,
    la ca marche, je pige pas pourquoi mais ca marche,,,
    hahaha l'ignorence c'est trop bien.
    je voie que tu a changé <formdescriptor> qui es la premiere balise par field...
    et que tu as mis des @ devant les champs.
    Bref merci beaucoup
    A plus
    Luis

  14. #14
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut XSL vers sql
    Re bonjour,
    voila qu'on me demande autre chose en rapport avec ce sujet...
    Alors voila, le fichier XML que l'on me donne pour d'une part le convertir a SQL et ensuite l'inserer se nome comme ceci:

    ramon_0077_2005-11-15_11_05_27.0.xml

    pour convertir ce fichier j'utilise le XSLT retouché un peu plus haut dans les posts et je fais:

    xsltproc toto.xsl $1 >toto.sql

    ou $1 est le fameu fichier passé en parametre

    Je dois ajouter un champs a la table afin d'inserer de façon dynamique juste cette partie: ramon_0077_2005
    Ceci sert d'identifiant unique.

    Ma question est donc: est t'il possible dans le xslt de faire ceci?
    voici le bout de code:
    (je colle pas tout)

    <xsl:template match="field">
    <xsl:text>insert into evaluacion (name, help, value, type) values('</xsl:text>
    <xsl:value-of select="@name"/>

    ca c'est la version actuelle qui marche super bien,
    je voudrais arriver a ceci:
    insert into evaluacion (name, id, help, value, type)
    Ou id serait ceci: ramon_0077_2005
    Je suppose que la solution serait de faire qqu chose comme ca:

    <xsl:value-of select="@valeur"/>
    et valeur bien sur serait le petit bout avec ramon et son numero...
    Est ce possible??
    D'avance merci

    Luis

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

Discussions similaires

  1. de XML vers mySQL
    Par abertaud dans le forum Outils
    Réponses: 1
    Dernier message: 19/01/2007, 21h37
  2. XML vers mySQL
    Par abertaud dans le forum VBScript
    Réponses: 1
    Dernier message: 19/01/2007, 17h10
  3. [XSLT]XML vers tableau html
    Par lcdDEV dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 27/10/2006, 16h55
  4. exporation XML vers Mysql
    Par nazar76 dans le forum Administration
    Réponses: 1
    Dernier message: 12/06/2006, 15h58
  5. [XSLT] XML vers XML
    Par ren0 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 13/10/2004, 12h54

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