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 :

probleme de xslt


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut probleme de xslt
    Bonjour,

    voila, j'utilise actuellement une fonction asp pour generer un fichier xml a partir d'une requete faite sur un serveur MS SQL Server.
    Jusque la, tout fonctionne j'obtiens bien un fichier xml avec mes informations dedans.
    mon probleme, c'est que je veux transformer ce fichier en un .csv; je rappelle qu'il s'agit d'une requete sql ... donc typiquement, un tableau. Un fichier csv est un fichier dans lequel chaque ligne du fichier represente une ligne du tableau. Chaque cellule etant separee par une virgule (easy :p)
    Mon unique probleme vient du fait que, en utilisant un simple xslt (enfin, j'ai deja eu du mal a le faire et bien je me fais avoir des qu'il y a des champs qui ne sont pas present dans une ligne...

    bon, un petit exemple vaut mieux qu'un long discour :p

    data.xml (les donnees issues de la bdd):
    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-stylesheet type="text/xsl" href="data.xsl"?>
    <xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'
    	xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
    	xmlns:rs='urn:schemas-microsoft-com:rowset'
    	xmlns:z='#RowsetSchema'>
    <s:Schema id='RowsetSchema'>
    	<s:ElementType name='row' content='eltOnly' rs:CommandTimeout='30'>
    		<s:AttributeType name='Champ1' rs:number='1' rs:writeunknown='true'>
    			<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='255' rs:maybenull='false'/>
    		</s:AttributeType>
    		<s:AttributeType name='ChampFacultatif1' rs:number='3' rs:nullable='true' rs:writeunknown='true'>
    			<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='255'/>
    		</s:AttributeType>
    		<s:AttributeType name='ChampFacultatif2' rs:number='4' rs:nullable='true' rs:writeunknown='true'>
    			<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='255'/>
    		</s:AttributeType>
    		<s:extends type='rs:rowbase'/>
    	</s:ElementType>
    </s:Schema>
    <rs:data>
    	<z:row Champ1='dummyData1' ChampFacultatif1='foo1'/>
    	<z:row Champ1='dummyData2' ChampFacultatif2='foo2'/>
    	<z:row Champ1='dummyData3'/>
    	<z:row Champ1='dummyData4' ChampFacultatif1='foo41' ChampFacultatif2='foo42'/>
    </rs:data>
    </xml>
    data.xsl (celui que j'utilise pour le moment :/ )
    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"?>
    <xsl:stylesheet version="1.0"
    	xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'
    	xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
    	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    	xmlns:rs='urn:schemas-microsoft-com:rowset'
    	xmlns:z='#RowsetSchema'>
     
    	<xsl:output method="text" indent="no" />
      <xsl:template match="/">  
        <xsl:apply-templates select="//s:AttributeType"/>
        <xsl:apply-templates select="//z:row"/>
      </xsl:template>
     
      <xsl:template match="s:AttributeType">
        <xsl:value-of select="@name" /><xsl:text>, </xsl:text>
      </xsl:template>
     
      <xsl:template match="z:row">
        <xsl:text>
    </xsl:text>
        <xsl:for-each select="@*">
          <xsl:value-of select="current()" /><xsl:text>, </xsl:text>
        </xsl:for-each>
      </xsl:template>
    </xsl:stylesheet>
    data.csv (le fichier resultant)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Champ1, ChampFacultatif1, ChampFacultatif2, 
    dummyData1, foo1, 
    dummyData2, foo2, 
    dummyData3, 
    dummyData4, foo41, foo42,
    le probleme se situe au niveau des champs facultatifs... en effet, le serveur sql ne remplit pas dans le fichier xml d'attribut correspondant si ils sont vides :/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	<z:row Champ1='dummyData2' ChampFacultatif2='foo2'/>
    ci-dessus, il n'y a que le ChampFacultatif2 de remplit, d'ou l'une des erreur s dans le csv:
    alors qu'il me faudrait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dummyData2, , foo2,
    Voila, je pense qu'il faudrait utiliser les noms qui se retrouvent bien en rapport entre la 1ere partie et la 2eme, mais la, ca devient bcp trop complique pour moi

    Donc si une bonne ame avait un truc a me filer (ou au moins, m'expliquer grosso modo comment faire... je planche dessus depuis kkes jours deja

    Merci d'avoir lu jusque la.

  2. #2
    Membre du Club
    Inscrit en
    Février 2003
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 39
    Points : 46
    Points
    46
    Par défaut
    Salut Alek-C,

    Tu as donc retenu la solution csv. Je voudais juste savoir une chose. Pour quoi ne génères tu pas directement du csv depuis ta base SQL Server et passes tu par un fichier XML? As tu réellement besoin de faire ca? Car tu perds grave en performance.

    Dans quel envirronement travailles tu? Quelles sont tes contraintes? Cherches tu à rendre publiable un document excel sur le web, ce document devant être généré à la volée? Et dans ce cas, utilises tu asp?

  3. #3
    Membre du Club
    Inscrit en
    Février 2003
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 39
    Points : 46
    Points
    46
    Par défaut
    Oups, j'avais pas fait attention, tu utilises asp. Alors pourquoi ne génères tu pas directement le csv depuis ta base SQL Server en asp sans passer par le XML? Ca marche trés bien, je l'ai déja fait.... Et en plus c'est beaucoup plus simple.

  4. #4
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    deja, parce que savais pas que c'etait possible :p

    ensuite, parce que je me disais que si je voulais faire un autre format, c'etait plus simple de passer par du xml (je pourrais vouloir le mettre dans un tableau html, le proposer en xml directement, en pdf...) et je me dis que cela ne devrait pas etre trop dur a faire... :/

    Mais si tu pouvais qd meme te filer ta solution pour le csv, ca m'aiderait bien.

    Merci

  5. #5
    Membre du Club
    Inscrit en
    Février 2003
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 39
    Points : 46
    Points
    46
    Par défaut
    C'est une page que j'ai ecrit lors de mon dernier stage à Boston. Un ami m'envoi mon code mais les bureaux ouvrent vers 15h (il y a 6 heures de décallage). tu devrais donc avoir mon code en fin de journées. Sinon, le principe est le suivant:

    Tu crées une connexion et tu fais tes requêtes en asp. (ca tu dois savoir faire deja). Apres, tu te sers du filesystemobject. Je te donne un bout de code.. et tu construit ton csv comme ca et puis tu rediriges directement ta page sur le document que tu viens de générer.

    1. Tu recupères tes données dans un RecordSet (je l'appelle rs par exemple)

    2. Tu génère un nom de fichier aléatoire (je te laisse le soin d'ecrire ton bout de code, mais le plus simple est de se servir de la date)

    3. Tu génères ton fichier csv que tu nommes avec le nom aleatoire que tu as eu au dessus

    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
     
     
    Set fs = Server.CreateObject("Scripting.FileSystemObject")
    Set a = fs.CreateTextFile("tempocsv\01214524517451145.csv", True)
    a.WriteLine(rs(0) &"," & rs(1) & "," & ..........) et ainsi de suite
    a.Close
     
    Set fs = nothing
    Set a = nothing
     
    'tu redirige ta page vers le fichier que tu viens de creer
     
    response.redirect("tempocsv\01214524517451145.csv")
     
    'on va te proposer de telecharger ce fichier
    4. tu ecris un petit script VB par exemple qui te purge ton repertoire contenant tes fichiers temporaires toutes les nuits. Pour le scheduler si tu es sur un serveur > NT 4.0 tu as un utilitaire graphique. Sinon tu utilises la commande 'at' (si tu ne fais pas ca tes fichiers tempo vont te binder ton disque et ton administrateur system va te tordre le cou!!!!!)

    Il est tout à fait possible et même extrêmement simple de générer du csv depuis une base de données via asp et tout cela de manière transparente pour les utilisateurs.

    Si je n'ai pas été assez claire, n'hesite pas, je peux même te passer mon tel si tu veux. Je t'envoie le code exact que j'avais mis en place des que je l'aurai recu (en find'apres midi). Bonne journee. Bye

  6. #6
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    aahhh ok =]

    j'avais pas vu ca comme ca

    merci de ta reponse... vais voir ce que ca donne.

    Ps.: te casses pas trop la tete pour le code si tu le retrouves pas... j'y arriverais ! j'avais pas pense a un simple response.write / redirect :p

    Ps2.: je suis a +10h de decalage

  7. #7
    Membre du Club
    Inscrit en
    Février 2003
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 39
    Points : 46
    Points
    46
    Par défaut
    OK...
    N'hésite pas si tu as d'autres questions (que ce soit asp, SQL Server, ou XML, ce sont des sujets que je connais relativement bien).... Tu peux egalement me contacter par mail (tu trouveras mon mail sur ma page web dans mon profil). Bon courage... Bye

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

Discussions similaires

  1. probleme avec xslt
    Par frake974 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 19/05/2009, 07h42
  2. [XSLT] problème transformation XSLT
    Par norkius dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 22/09/2006, 11h33
  3. petit probleme avec XSLT
    Par thefaycal dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 23/01/2006, 08h06
  4. [XSLT] probleme pour déclarer css et autre xmlns
    Par enigma dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 18/07/2005, 12h46
  5. [XSLT] Probleme de selection avec namespaces
    Par Ludo_xml dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 01/06/2005, 14h32

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