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 :

[XSLT] export XML vers texte plat sans délimiteur


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut [XSLT] export XML vers texte plat sans délimiteur
    Bonjour,

    Après avoir lu les différents cours proposé par developper.com sur le XML, XSL et XSLT dans mon cas, je dois exporter des données d'un fichier xml vers un texte plat sans délimiteur, mais dont les champs sont de longeurs fixes et complétés par des espaces.

    Voici un exemple :
    Fichier GLD.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet href="xml2text.xsl" type="text/xsl"?>
     
    <GLM>
    <Item><ID>254</ID><OBJ_KEY>_MPP2007-004-DF</OBJ_KEY><DOC_DATE>20071112</DOC_DATE><DESC>obj MPP vers DF</DESC></Item>
    <Item><ID>3254</ID><OBJ_KEY>_MPJJ2007-003-DF</OBJ_KEY><DOC_DATE>20071110</DOC_DATE><DESC>obj MPJJ vers DF particulier</DESC></Item>
    </GLM>
    Fichier xml2text.xsl
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output 
    	method="html"
    	encoding="UTF-8"
    	doctype-public="-//W3C//DTD HTML 4.01//EN"
    	doctype-system="http://www.w3.org/TR/html4/strict.dtd"
    	indent="yes" />
     
    <xsl:variable name="separateur"><xsl:text> </xsl:text></xsl:variable>
     
    <xsl:template match="GLM">
    	<html><body><pre>
    		<xsl:apply-templates select="Item" />
    	</pre></body></html>
    </xsl:template>
     
    <xsl:template match="Item">
    	<xsl:value-of select="ID" />
    	<xsl:value-of select="$separateur"/>
    	<xsl:value-of select="OBJ_KEY" />
    	<xsl:value-of select="$separateur"/>
    	<xsl:value-of select="DOC_DATE" />
    	<xsl:value-of select="$separateur"/>
    	<xsl:value-of select="DESC" />
    	<xsl:value-of select="$separateur"/>
    	<br/>
    </xsl:template>
    </xsl:stylesheet>

    Voici ce que j'obtiens en sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    254 _MPP2007-004-DF 20071112 obj MPP vers DF 
    3254 _MPJJ2007-003-DF 20071110 obj MPJJ vers DF particulier
    Voici ce que je souhaiterais obtenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     254 _MPP2007-004-DF  20071112 obj              MPP vers DF
    3254 _MPJJ2007-003-DF 20071110 obj MPJJ vers DF particulier
    Dans mon cas je voudrais cadrer l'ID à droite sur 4 caractères, le champ OBJ_KEY à gauche sur 22 caractères et le champ DESC à droite sur 30 caractères en complétant ces champs par des espaces.

    En recherchant sur internet, j'ai trouvé beacoup d'exemples pour transformer du texte en XML, pour exporter du XML en CSV, mais pas du XML en texte avec des champs de taille fixe.

    Merci d'avance de votre aide.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Salut,
    j'ai fait ça :
    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
    59
    60
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output 
    	method="text"
    	encoding="UTF-8"
    	indent="no" />
     
    <xsl:variable name="separateur"><xsl:text> </xsl:text></xsl:variable>
     
    <xsl:template match="GLM">
    <xsl:apply-templates select="Item" />
    </xsl:template>
     
    <xsl:template match="Item">
    	<xsl:call-template name="fixedField">
    	  <xsl:with-param name="value" select="ID"/>
    	  <xsl:with-param name="length" select="6"/>
        <xsl:with-param name="align" select="'right'"/>
      </xsl:call-template>
    	<xsl:value-of select="$separateur"/>
      <xsl:call-template name="fixedField">
    	  <xsl:with-param name="value" select="OBJ_KEY"/>
    	  <xsl:with-param name="length" select="20"/>
      </xsl:call-template>
     
    	<xsl:value-of select="$separateur"/>
    	<xsl:call-template name="fixedField">
    	  <xsl:with-param name="value" select="DOC_DATE"/>
    	  <xsl:with-param name="length" select="20"/>
      </xsl:call-template>
    	<xsl:value-of select="$separateur"/>
    	<xsl:call-template name="fixedField">
    	  <xsl:with-param name="value" select="DESC"/>
    	  <xsl:with-param name="length" select="15"/>
      </xsl:call-template>
    	<xsl:value-of select="$separateur"/><xsl:text>
    </xsl:text>
    </xsl:template>
     
     
    <xsl:template name="fixedField">
      <xsl:param name="value"/>
      <xsl:param name="length"/>
      <xsl:param name="align"/>
     
      <xsl:choose>
        <xsl:when test="$align='right'"><xsl:call-template name="createEmptyString"><xsl:with-param name="length" select="$length - string-length($value)"/></xsl:call-template><xsl:value-of select="$value"/></xsl:when>
        <xsl:otherwise><xsl:value-of select="$value"/><xsl:call-template name="createEmptyString"><xsl:with-param name="length" select="$length - string-length($value)"/></xsl:call-template></xsl:otherwise>
      </xsl:choose>
    </xsl:template>
     
    <xsl:template name="createEmptyString">
      <xsl:param name="length"/>
     
      <xsl:choose>
        <xsl:when test="$length &gt; 0"><xsl:text> </xsl:text><xsl:call-template name="createEmptyString"><xsl:with-param name="length" select="$length - 1"/></xsl:call-template></xsl:when>
      </xsl:choose>
    </xsl:template>
     
    </xsl:stylesheet>

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup ça me convient tout à fait !

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

Discussions similaires

  1. Export XML vers Excel
    Par House MD dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 11/01/2008, 09h13
  2. [XSLT]de xml vers un tableau dynamique
    Par bwwilly dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 26/06/2007, 10h59
  3. [XSLT] transformation xml vers fichier .text !
    Par kader78190 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 03/11/2006, 12h45
  4. [XSLT] Conversion xml vers txt ou mdb etc
    Par narodar dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 23/06/2006, 14h31
  5. [XSLT] transformation xml vers xml
    Par nemya dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 22/02/2006, 11h02

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