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 sql


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut [XSLT] xml vers sql
    Bonjour,
    qq'un pourrait m'aider a editer un xslt qui traduirais ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <element tag="0008,0005" vr="CS" vm="1" len="10" name="SpecificCharacterSet">ISO_IR 100</element>
    <element tag="0008,0008" vr="CS" vm="4" len="28" name="ImageType">ORIGINAL\PRIMARY\AXIAL\HELIX</element>
    <element tag="0008,0012" vr="DA" vm="1" len="8" name="InstanceCreationDate">20070426</element>
    <element tag="0008,0013" vr="TM" vm="1" len="6" name="InstanceCreationTime">094739</element>
    <element tag="0008,0016" vr="UI" vm="1" len="26" name="SOPClassUID">1.2.840.10008.5.1.4.1.1.2</element>
    <element tag="0008,0018" vr="UI" vm="1" len="42" name="SOPInstanceUID">1.2.840.113704.1.111.6460.1177573659.1439</element>
    <element tag="0008,0020" vr="DA" vm="1" len="8" name="StudyDate">20070426</element>
    en ceci:
    insert in to [table] values ('xxx', 'xxx',);
    Le xml est toujours sonstitué de la meme façon, et il y a environ 50 champs d'information.
    Est ce possible?
    D'avance merci
    Luis

  2. #2
    Membre émérite
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Par défaut
    à partir du fichier xml peux tu nous donner le sql que tu veux générer car là pour ma part je me pose la question suivante par exemple: 1 fichier xml = 1 insert ?

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut xml2sql
    Bonjour,
    en fait le but est de generer un fichier sql (un seul) avec autant de ligne insert que d'elements a inserer dans la base.
    Donc par exemple s'il y a 15 <element><.....>VALEUR</element>
    et bien nous aurons un fichier sql avec 15 fois insert into.

    J'ai commencé a faire ceci, mais j'y arrive pas:

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

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

    <xsl:template match="element">
    <xsl:text>insert into cabezera (MetaElementGroupLength)
    values('</xsl:text>');
    <xsl:text>insert into cabezera (MediaStorageSOPClassUID)
    values('</xsl:text>');

    </xsl:template>

    </xsl:stylesheet>


    D'avance merci

  4. #4
    Membre émérite
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Par défaut
    en faite qi on ne prend que la ligne
    <element tag="0008,0005" vr="CS" vm="1" len="10" name="SpecificCharacterSet">ISO_IR 100</element>

    le sql que tu veux obtenir ressemble à quoi?

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut xml2sql
    Bonjour,
    et bien pour cette ligne ca ferait ca :

    <element tag="0008,0005" vr="CS" vm="1" len="10" name="SpecificCharacterSet">ISO_IR 100</element>


    SQL
    insert in TABLE ("SpecificCharacterSet") values ("ISO_IR 100");

    Sachant qu'il n'y a qu'une seule table avec plein de champs, et chaque champs n'as qu'une seule valeur.
    D'avance merci
    Luis

  6. #6
    Membre émérite
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <xsl:stylesheet version="1.0" xmlnssl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>
     
    <xsl:template match="/">
    <xsl:apply-templates select="//element"/>
    </xsl:template>
     
    <xsl:template match="element">
    insert into cabezera (<xsl:value-of select = "./@name" />) values('<xsl:value-of select = "." />');
    </xsl:template>
     
    </xsl:stylesheet>

  7. #7
    Membre émérite
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Par défaut
    je complète ma réponse: tu risques d'avoir des soucis avec des retours chariot là il faut voir: <xsl:text> et <strip-space>

  8. #8
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut xml2sql
    Salut,
    super merci je vais testé ton code dé aujourdh'hui.
    A bientot

    Luis

  9. #9
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut xml2sql
    Alors voila ce que ca donne:

    [root@srvweb vision]# xsltproc cabezera.xsl cabezera.xml
    cabezera.xsl:1: warning: Namespace prefix xsl is not defined
    <xsl:stylesheet version="1.0" xmlnssl="http://www.w3.org/1999/XSL/Transform">
    ^
    cabezera.xsl:2: error: attributes construct error
    <xsl:output method="text"//>
    ^
    cabezera.xsl:2: error: error parsing attribute name
    <xsl:output method="text"//>
    ^
    cabezera.xsl:2: error: attributes construct error
    <xsl:output method="text"//>
    ^
    cabezera.xsl:2: error: xmlParseStartTag: problem parsing attributes
    <xsl:output method="text"//>
    ^
    cabezera.xsl:2: error: Couldn't find end of Start Tag xsl:output line 2
    <xsl:output method="text"//>
    ^
    cannot parse cabezera.xsl

    j'ai fait un copié coller du xsl...comme ca "a lo bruto" faut il ajouter des tags?? Je n'y connais rien en xml et xsl

  10. #10
    Membre émérite
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Par défaut
    cela est bizarre le <xsl:output method="text"//> est faux il faut <xsl:output method="text"/>
    je pense qu'il y a un problème dans le copié coller

    sinon j'ai fait un exemple
    essai.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?xml version="1.0" encoding="UTF-8"?>
    <racine>
    <element tag="0008,0005" vr="CS" vm="1" len="10" name="SpecificCharacterSet">ISO_IR 100</element>
    <element tag="0008,0008" vr="CS" vm="4" len="28" name="ImageType">ORIGINAL\PRIMARY\AXIAL\HELIX</element>
    <element tag="0008,0012" vr="DA" vm="1" len="8" name="InstanceCreationDate">20070426</element>
    <element tag="0008,0013" vr="TM" vm="1" len="6" name="InstanceCreationTime">094739</element>
    <element tag="0008,0016" vr="UI" vm="1" len="26" name="SOPClassUID">1.2.840.10008.5.1.4.1.1.2</element> 
    <element tag="0008,0018" vr="UI" vm="1" len="42" name="SOPInstanceUID">1.2.840.113704.1.111.6460.1177573659.1439</element>
     <element tag="0008,0020" vr="DA" vm="1" len="8" name="StudyDate">20070426</element>
    </racine>
    essai.xsl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?xml version="1.0" encoding="UTF-8"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="txt"/>
    	<xsl:strip-space elements="*"/>
     
     
    <xsl:template match="element">
    insert into cabezera (<xsl:value-of select = "./@name" />) values('<xsl:value-of select = "." />');
    </xsl:template>
     
    </xsl:stylesheet>
    résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    insert into cabezera (SpecificCharacterSet) values('ISO_IR 100');
     
    insert into cabezera (ImageType) values('ORIGINAL\PRIMARY\AXIAL\HELIX');
     
    insert into cabezera (InstanceCreationDate) values('20070426');
     
    insert into cabezera (InstanceCreationTime) values('094739');
     
    insert into cabezera (SOPClassUID) values('1.2.840.10008.5.1.4.1.1.2');
     
    insert into cabezera (SOPInstanceUID) values('1.2.840.113704.1.111.6460.1177573659.1439');
     
    insert into cabezera (StudyDate) values('20070426');

  11. #11
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut xml2sql
    Salut,
    c'est beau..
    attends je teste...
    c'est peux etre a cause du programme que j'utilise...
    cette fois ca marche...super merci beaucoup de ton aide.
    Tu pourrais me dire avec quel outil tu passe ca?
    J'utilise xsltproc (standard sur red hat 3)
    A plus

  12. #12
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut xml2sql
    Rebonjour,

    est il possible de faire des filtre avec xsl?
    dans notre exemple tu vois au debut des lignes il y a un code :
    <element tag="0008,0005"
    le 0008 correspond a une table de la base de donnée, celle que tu as ecrite "cabezera" ca veut dire tete en spanish.
    Si dans le fichier xml il existe d'autres code...c'est possible de donner un nom different aux tables en fonction du numero?
    D'avance merci

  13. #13
    Membre émérite
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Par défaut
    En gros ce que tu demande est: en fonction de l'attribut tag peux ton modifier le nom de la table ? la réponse est oui (en gros il s'agit d'une table de transco
    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
     
    <?xml version="1.0" encoding="UTF-8"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="txt"/>
    	<xsl:strip-space elements="*"/>
     
     
    <xsl:template match="element">
    <xsl:variable name="table">
    <xsl:call-template name = "getTable" >
                        <xsl:with-param name = "A" ><xsl:value-of select = "./@tag" /></xsl:with-param>
    </xsl:call-template> 
    </xsl:variable>
    insert into <xsl:value-of select = "$table" /> (<xsl:value-of select = "./@name" />) values('<xsl:value-of select = "." />');
    </xsl:template>
     
    <xsl:template name = "getTable" >
                   <xsl:param name = "A" /> 
                   <xsl:if test = "A='0008'" >
                        <xsl:text >cabezera</xsl:text>
                   </xsl:if> 
                   <xsl:if test = "A='0009'" >
                        <xsl:text >cabezera2</xsl:text>
                   </xsl:if> 
    </xsl:template>
     
    </xsl:stylesheet>
    après on peux voir pour faire une vrai transco avec un fichier xml externe

  14. #14
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut xml2sql
    C'est chouette XML, c'est un outil de programmation complet...je savais pas que l'on pouvait faire autant.
    Et bien cette fois c'est la bonne, merci pour tout.
    Si tu as besoins de trucs sur oracle, n'hesite pas a demander.
    A plus

    Luis

  15. #15
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut xml2sql
    Rebonjour,
    juste un truc,
    le fichier de resultat sort comme ceci:

    insert into (MetaElementGroupLength) values('188');

    insert into (FileMetaInformationVersion) values('');

    insert into (MediaStorageSOPClassUID) values('1.2.840.10008.5.1.4.1.1.2');

    insert into (MediaStorageSOPInstanceUID) values('1.2.840.113704.1.111.6460.1177573659.1439');

    insert into (TransferSyntaxUID) values('1.2.840.10008.1.2.1');

    insert into (ImplementationClassUID) values('1.2.826.0.1.3680043.1.1.4.3.28.2');

    insert into (ImplementationVersionName) values('DCMOBJ4.3.28.2');


    icomme si la variable $table etait vide.
    Dans chaque ligne il existe 0008,xxxx ou x est un autre nombre, tu penses que ca peut venir de ca?
    D'avance merci
    Luis

  16. #16
    Membre émérite
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Par défaut
    oui la variable table doit être vide
    à mon avis au niveau du test <xsl:if test = "A='0008'" > il faudrait mieux l'écrire comme cela <xsl:if test = "starts-with($A,'0008,')='true'" >

    et voila

  17. #17
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut xml2sql
    Bonjour,
    encore une fois merci,
    cette fois ca marche super.
    A bientot
    Luis

  18. #18
    Membre émérite
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Par défaut
    @+:p

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

Discussions similaires

  1. [XSLT] XML vers SQL
    Par defrayprod dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 01/12/2007, 16h03
  2. [XSLT] XML vers HTML
    Par SONY30 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 05/04/2007, 09h54
  3. [XSLT]XML vers tableau html
    Par lcdDEV dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 27/10/2006, 17h55
  4. Importation xml vers sql server
    Par nicko5959 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/01/2006, 10h06
  5. [XSLT] XML vers XML
    Par ren0 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 13/10/2004, 13h54

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