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):
data.xsl (celui que j'utilise pour le moment :/ )Code:
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.csv (le fichier resultant)Code:
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>
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:
1
2
3
4
5
6 Champ1, ChampFacultatif1, ChampFacultatif2, dummyData1, foo1, dummyData2, foo2, dummyData3, dummyData4, foo41, foo42,
ci-dessus, il n'y a que le ChampFacultatif2 de remplit, d'ou l'une des erreur s dans le csv:Code:
1
2<z:row Champ1='dummyData2' ChampFacultatif2='foo2'/>
alors qu'il me faudrait:Code:
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 :(Code:
1
2 dummyData2, , foo2,
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.