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

Format d'échange (XML, JSON...) Java Discussion :

Nom du fichier en Output [XSLT]


Sujet :

Format d'échange (XML, JSON...) Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 52
    Par défaut Nom du fichier en Output
    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":

    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>
    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
    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>
    Tout fonctionne très bien, le contenu de mon XML d'entrée est bien tranformé en text sans les balises.
    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

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    C'est le programme qui appelle la transformation qui détermine vers où on envoie le flux transformé. XSLT, ca travaille à la volée avec des flux, ca n'a pas de nom un flux.

    De plus e, java on lui file un objet "Source" qui n'a a priori rien à voir avec un fichier, et on lui demande d'écrire la sortie dans une destination qui est aussi quelconque.

    Bref faudrait voir ton code java pour te dire comment préciser le nom du fichier

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 52
    Par défaut
    Bonjour et merci pour la réponse.
    En fait je n'ai pas de code Java, j'utilise un progiciel qui me sors un XML et me permet de mapper ce fichier de sortie avec un XSLT et de poser le résultat dans le répertoire de mon choix. Voial tout ce que je peux paramétrer.
    Je n'ai donc pas la main sur le nom du fichier transformé...

    J'essaie de voir avec la méthode ci-dessous mais XML Spy ne la reconnait pas (A la compil j'ai une erreure):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:result-document method="text" href="NomDuFichier.txt">
    Est-ce que je suis sur la bonne voie ou est-ce que ca ne sert à rien?

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ca ne sert à rien, comme je l'ai dit, ce n'est pas XSLT qui détermine ce nom de fichier, mais votre logiciel. A vous de les configurer comme vous en avez besoin.

    Certe il existe xslt:result-document mais ca a les inconvénients suivant:

    1) ca crée un deuxième document (le premier que vous aviez est donc toujours créé)
    2) il aura donc toujours le même nom (avec les problème qui pourraient arriver si vous exécutez plusieurs fois la XSLT en parallèle) sur lequel le logiciel n'a plus aucun contrôle
    3) ce n'est disponible qu'à partir de XSLT 2.0, hors votre entete mentionne XSLT version 1, il faut donc que votre logiciel support xslt 2.0.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 52
    Par défaut
    OK

    Je vais essayer de voir s'il gère le XSLT 2.0: même si j'ai 2 fichiers mais que 1 des 2 à le bon nom, ca le fera...

    Merci pour la réponse, je vais me tourner vers l'editeur du progiciel pour voir s'il existe une solution.

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

Discussions similaires

  1. Comment récupérer le nom du fichier sans l'extension ?
    Par altahir007 dans le forum Langage
    Réponses: 16
    Dernier message: 13/11/2009, 13h20
  2. Récupérer le nom du fichier spool correspondant à un job
    Par chtiot dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 23/02/2004, 20h28
  3. Réponses: 2
    Dernier message: 29/01/2004, 11h05
  4. Réponses: 4
    Dernier message: 10/10/2003, 18h04
  5. nom de fichier et variables d'environnement
    Par joebarthib dans le forum Langage
    Réponses: 2
    Dernier message: 18/07/2002, 15h21

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