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 :

[XSL/FO]Pb retour a la ligne


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 17
    Par défaut [XSL/FO]Pb retour a la ligne
    Bonjour,

    voici mon élément xml qui me pose probleme :
    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
     
    - <chapitre nom="Plan d occupation">
     - <rubrique nom="">
      - <espace nom="Hall 1">
       - <date valeurshort="20030331" valeurlong="lundi 31 mars 2003">
        <type-ressource /> 
        <code-ressource /> 
        <quantite-ressource /> 
        <horaire-ressource>08h00-20h00</horaire-ressource> 
        <champ-utilisateur ID="Plan d occupation87" order-rowid="561231/03/200308h00-20h00" style="">08-00 : amenagement 10-00 : prise 11 ergjdfg</champ-utilisateur> 
       </date>
      </espace>
     </rubrique>
     <textelibre valeur="" /> 
    </chapitre>
    et le voici au format *.txt

    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
     
      <chapitre nom="Plan d occupation">
        <rubrique nom="">
          <espace nom="Hall Bordeaux">
            <date valeurshort="20030331" valeurlong="lundi 31 mars 2003">
              <type-ressource />
              <code-ressource />
              <quantite-ressource />
              <horaire-ressource>08h00-20h00</horaire-ressource>
              <champ-utilisateur ID="Plan d occupation87" order-rowid="561231/03/200308h00-20h00" style="">08-00 : amenagement&#xD;10-00 : prise&#xD;11 ergjdfg</champ-utilisateur>
              <a-imprimer ID="Plan d occupationPDF88" pdf="true" />
            </date>
          </espace>
        </rubrique>
        <textelibre valeur="" />
      </chapitre>
    Quand je le transforme au format html (voir code ci dessous), le saut de ligne est bien pris en compte :

    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
     
    		<td>
    			<textarea STYLE="overflow:hidden" OnClick="AffWritableBulle(this.value,this.name)" cols="80">
    				<xsl:attribute name="style">
    					<xsl:value-of  select="rubrique/espace/date/champ-utilisateur/@style"/>
    				</xsl:attribute>		
    				<!-- Nom du champs input identifiant unique -->
    				<xsl:attribute name="name">
    					<xsl:value-of select="rubrique/espace/date/champ-utilisateur/@ID"/>
    				</xsl:attribute>
    				<!-- Valeur par defaut -->
     
    				<xsl:value-of select="rubrique/espace/date/champ-utilisateur"/>
    			</textarea>
    		</td>
    Resultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <td><textarea cols="80" OnClick="AffWritableBulle(this.value,this.name)" STYLE="overflow:hidden" style="" name="Plan d occupation87">08-00 : amenagement& #13;10-00 : prise& #13;11 ergjdfg</textarea></td>
    J'ai rajouté un espace entre le & et #13; pour les afficher

    en revanche, lors de la transformation avec fop, le saut de ligne n'est plus pris en compte.

    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
     
            <fo:table-cell border-color="black" border-style="solid" border-width="0.5pt" text-align="left" padding="3pt">
              <fo:block>
                <fo:block>
                  <!-- Nom du champs input identifiant unique -->
                  <!-- Valeur par defaut -->
                  <xsl:choose>
                    <xsl:when test="rubrique/espace/date/champ-utilisateur/@style=''">
                      <fo:block>
                        <xsl:value-of select="rubrique/espace/date/champ-utilisateur" />		
                      </fo:block>
                    </xsl:when>
                    <xsl:otherwise>
                      <fo:block color="red">
    	  <xsl:value-of select="rubrique/espace/date/champ-utilisateur" />					
                      </fo:block>
                    </xsl:otherwise>
                  </xsl:choose>
                </fo:block>
              </fo:block>
            </fo:table-cell>
    J'ai essayé de faire des test sur la valeurs de la chaine, et plus precisément sur les caractéres "&#xD;", mais cela ne donne rien.
    Est ce que quelqu'un a dejà rencontré ce pb, ou à une solution?
    Merci de votre aide.

  2. #2
    Membre Expert
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Par défaut
    Salut,

    en faite pour faire des saut de ligne avec fop il faut utilisé fo:block
    c'est à dire fermer et réouvrir une autre balise fo:block!

    Donc dans ton exemple il te suffit de faire un substring-before et -after afin d'enlever ton caractère et de le remplacer par </fo:block><fo:block>!

    ++

    Thierry

  3. #3
    Membre averti

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 17
    Par défaut
    lu thierry
    en fait, j'ai trouvé sur un autre post ce template :

    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
     
      <xsl:template name="lf2br">
        <!-- import $StringToTransform -->
        <xsl:param name="StringToTransform" />
        <xsl:choose>
          <!-- string contains linefeed -->
          <xsl:when test="contains($StringToTransform,'&#xD;')">
            <xsl:value-of select="substring-before($StringToTransform,'&#xD;')" />
    		  &lt;/fo:block&lg;&lt;fo:block&gt;
            <xsl:call-template name="lf2br">
              <xsl:with-param name="StringToTransform">
                <xsl:value-of select="substring-after($StringToTransform,'&#xD;')" />
              </xsl:with-param>
            </xsl:call-template>
          </xsl:when>
          <xsl:otherwise>
            <xsl:value-of select="$StringToTransform" />
          </xsl:otherwise>
        </xsl:choose>
      </xsl:template>
    que j'appelle comme suit :

    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
     
                <fo:block>
                  <!-- Nom du champs input identifiant unique -->
                  <!-- Valeur par defaut -->
                  <xsl:choose>
                    <xsl:when test="rubrique/espace/date/champ-utilisateur/@style=''">
                      <fo:block>
    					<xsl:call-template name="lf2br">
    						<xsl:with-param name="StringToTransform" select="rubrique/espace/date/champ-utilisateur"/>
    					</xsl:call-template>
    				<!--test	  
                        <xsl:value-of select="rubrique/espace/date/champ-utilisateur" />
    				-->		
                      </fo:block>
                    </xsl:when>
                    <xsl:otherwise>
                      <fo:block color="red">
                        <xsl:call-template name="lf2br">
    						<xsl:with-param name="StringToTransform" select="rubrique/espace/date/champ-utilisateur"/>
    					</xsl:call-template>
    					<!--AT test
    					  <xsl:value-of select="rubrique/espace/date/champ-utilisateur" />
    					-->	
                      </fo:block>
                    </xsl:otherwise>
                  </xsl:choose>
                </fo:block>
    mais cela n'interprete pas les fo:block

  4. #4
    Membre Expert
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Par défaut
    et dans un CDATA?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <![CDATA[</fo:block><fo:block>]]>

  5. #5
    Membre averti

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 17
    Par défaut
    j'essaye et je te tiens au courant

  6. #6
    Membre averti

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 17
    Par défaut
    non toujours pareil ca n'interprete pas les balise fo:block

  7. #7
    Membre Expert
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Par défaut
    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
     
      <xsl:template name="lf2br">
        <!-- import $StringToTransform -->
        <xsl:param name="StringToTransform" />
        <xsl:choose>
          <!-- string contains linefeed -->
          <xsl:when test="contains($StringToTransform,'&#xD;')">
           <fo:block> <xsl:value-of select="substring-before($StringToTransform,'&#xD;')" />
    		</fo:block>
            <xsl:call-template name="lf2br">
              <xsl:with-param name="StringToTransform">
                <xsl:value-of select="substring-after($StringToTransform,'&#xD;')" />
              </xsl:with-param>
            </xsl:call-template>
          </xsl:when>
          <xsl:otherwise>
            <xsl:value-of select="$StringToTransform" />
          </xsl:otherwise>
        </xsl:choose>
      </xsl:template>
    que j'appelle comme suit :

    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
     
                <fo:block>
                  <!-- Nom du champs input identifiant unique -->
                  <!-- Valeur par defaut -->
                  <xsl:choose>
                    <xsl:when test="rubrique/espace/date/champ-utilisateur/@style=''">
     
    					<xsl:call-template name="lf2br">
    						<xsl:with-param name="StringToTransform" select="rubrique/espace/date/champ-utilisateur"/>
    					</xsl:call-template>
    				<!--test	  
                        <xsl:value-of select="rubrique/espace/date/champ-utilisateur" />
    				-->		
     
                    </xsl:when>
                    <xsl:otherwise>
                      <fo:block color="red">
                        <xsl:call-template name="lf2br">
    						<xsl:with-param name="StringToTransform" select="rubrique/espace/date/champ-utilisateur"/>
    					</xsl:call-template>
    					<!--AT test
    					  <xsl:value-of select="rubrique/espace/date/champ-utilisateur" />
    					-->	
                      </fo:block>
                    </xsl:otherwise>
                  </xsl:choose>
                </fo:block>

    Pourquoi ne pas faire tes fo:block dans ton template? comme ci-dessus

  8. #8
    Membre averti

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 17
    Par défaut
    c nickel, ca fonctionne merci
    a+
    bonne fin de journée

  9. #9
    Membre Expert
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Par défaut
    Des fois faut prendre les problèmes dans un autre sens pour les résoudre

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/01/2008, 15h11
  2. [XSL~FO] Affichage avec retour a la ligne
    Par mrkzed dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 15/03/2007, 15h07
  3. [XSL] - Insertion de retour a la ligne
    Par jalex dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 21/06/2006, 16h21
  4. Réponses: 2
    Dernier message: 08/06/2004, 14h42
  5. Réponses: 8
    Dernier message: 02/04/2004, 17h31

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