Bonjour,
Je souhaiterai savoir s'il est possible d'avoir la main sur le nom d'un fichier que l'on créer à partir d'une transormation via un XSLT?
Je m'explique.
J'ai un fichier XML que je dois transformer en TXT
Pour cela j''ai créé un fichier XSLT en precisant method="text":
Ce fichier XSLT appelle une fonction XSL "CreateFlatFile":
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" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns0="http://www.Apriso.com/ZP01.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="ns0 xs"> <xsl:output method = "text" encoding = "string" omit-xml-declaration = "yes" standalone = "yes" indent = "yes"/> <xsl:include href="C:\Inetpub\wwwroot\SchemaRepository\Maps\XRIS_Functions.xsl"/> <xsl:template match="/"> <xsl:for-each select="ns0:ZP01/ns0:MAIN/ns0:LINES"> <xsl:call-template name="CreateFlatFile"> <xsl:with-param name="Line_list" select="ns0:LINE"/> <xsl:with-param name="delimiter" select="','"/> </xsl:call-template> </xsl:for-each> </xsl:template> </xsl:stylesheet>
Tout fonctionne très bien, le contenu de mon XML d'entrée est bien tranformé en text sans les balises.
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- ___________________________________________________________ CreateFlatFile ___________________________________________________________--> <!--Creation Flat File--> <!-- Permet de sortir une List Of Char passée en entrée --> <xsl:template match="*"> <xsl:for-each select="."> <xsl:call-template name="CreateFlatFile"> <xsl:with-param name="Line_list" select="."/> <xsl:with-param name="delimiter">,</xsl:with-param> </xsl:call-template> </xsl:for-each> </xsl:template> <!--Definition de la fonction --> <xsl:template name="CreateFlatFile"> <xsl:param name="Line_list"/> <xsl:param name="delimiter"/> <!--On recupere le premier element de la liste --> <xsl:variable name="firstLine"> <xsl:choose> <xsl:when test="contains($Line_list, $delimiter)"> <xsl:value-of select="substring-before($Line_list, $delimiter)"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="normalize-space(translate(translate($Line_list,'{',''),'}',''))"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name="remainingLines" select="substring-after($Line_list, $delimiter)"/> <!--On creer la sortie au type string --> <xsl:choose> <xsl:when test="string-length($firstLine) > 0"> <xsl:value-of select="translate(translate($firstLine,'{',''),'}','')"/> <xsl:text> </xsl:text> </xsl:when> </xsl:choose> <!--Test si il reste des element dans la liste. Si oui alors on va relancer la fonction sinon fin de traitement --> <xsl:choose> <xsl:when test="string-length($firstLine) = 0"> <!--On ne fait rien: on sort de cette fonction --> </xsl:when> <xsl:when test="string-length($remainingLines) != 0"> <xsl:call-template name="CreateFlatFile"> <xsl:with-param name="Line_list" select="$remainingLines"/> <xsl:with-param name="delimiter"> <xsl:value-of select="$delimiter"/> </xsl:with-param> </xsl:call-template> </xsl:when> </xsl:choose> </xsl:template> </xsl:stylesheet>
Mon seul soucis: le fichier créé dans mon répertoire s'apelle "XMLOutput_xx.xml". Je voudrait qu'il s'apelle "DateTime_xx.txt".
Est-ce que quelqu'un aurait déjà rencontré cette problématique? Faut-il agir au niveau du XSLT ou du XSL?
Merci
Partager