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.