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 :

Retrait de paragraphe en XSL


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 47
    Par défaut Retrait de paragraphe en XSL
    Bonjour,
    J'ai un document XML, je veux mettre le texte en forme via une feuille de style XSL.
    C'est dans ce genre-là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <paragraphe>
      <style1>bla bla bla bla bla bla</style1>
      <style2> blo blo blo</style2>
      <style3>bli bli bli bli</style3>
    </paragraphe>
    (plusieurs fois avec des textes différents)

    et je veux avoir un retrait à gauche de par exemple 40px pour tous les paragraphes entre les balises "paragraphe" (c'est à dire, même s'il y a plusieurs lignes de texte, je veux que toutes les lignes du paragraphe soient
    à 40px du bord).

    J'ai essayé en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <xsl:template match="paragraphe">
     
         <div style="margin-left: 40px;">
                 <xsl:value-of select="."/>
          </div>
     
    </xsl:template>
    mais ça marche pas, ça défait la mise en forme de tout ce qui est dans le paragraphe.
    Quelqu'un peut-il m'aider?

    Merci!!!

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    xsl:value-of ne fait que récupérer le texte, en perdant toutes les balises. Il faut utiliser xsl:apply-templates, à la place.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 47
    Par défaut
    Ok, merci bcp!

    Et sinon, si j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <style1>bla bla bla bla bla bla</style1>
      <style2> blo blo blo</style2>
      <style3>bli bli bli bli</style3>
    et que je veux aussi qu'à chaque fois que j'ai le groupe style1+style2+style3 à la suite (sans qu'ils soient inclus dans "paragraphe"), ils soient en retrait, ya-t-il une solution en XSL?

    Merci

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Il y en a une mais ça devient chiant.
    En fonction de ton cas très précis on peut peut-être chercher une méthode plus simple, mais dans le cas général ce sera :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <xsl:template match="style1[following-sibling::*[1][self::style2] and following-sibling::*[2][self::style3]]">
      <ma-balise-pour-retrait-style1>
        <xsl:apply-templates/>
      </ma-balise-pour-retrait-style1>
    </xsl:template>
     
    <xsl:template match="style2[preceding-sibling::*[1][self::style1] and following-sibling::*[1][self::style3]]">
      <ma-balise-pour-retrait-style2>
        <xsl:apply-templates/>
      </ma-balise-pour-retrait-style2>
    </xsl:template>
     
    <!-- Meme chose pour style3 -->
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 47
    Par défaut
    Merci beaucoup.

    Pour le 3e style j'ai mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:template match="style3[preceding-sibling::*[1][self::style1] and 
    preceding-sibling::*[1][self::style1]]">
      <ma-balise-pour-retrait-style3>
        <xsl:apply-templates/>
      </ma-balise-pour-retrait-style3>
    </xsl:template>
    tu as mis "même chose" mais c'est pas tout à fait la même chose (c'est évident pour toi mais pas pour les nuls comme moi ). Est-ce que c'est bon où je me suis trompé? (je débute)

    Je dois mettre quoi à la place de "ma-balise-pour-retrait-..." ? J'ai pas trop compris à quoi ça servait ni à quoi ça correspondait.
    J'ai dû louper un épisode, mais à quel endroit on définit combien de pixels mesurera le retrait?

    Merci

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Citation Envoyé par pwyll2 Voir le message
    tu as mis "même chose" mais c'est pas tout à fait la même chose (c'est évident pour toi mais pas pour les nuls comme moi ). Est-ce que c'est bon où je me suis trompé? (je débute)
    Il y a une erreur. Selon ton exemple, la balise <style3> ne doit être traitée que si son deuxième preceding-sibling est un <style1> et si son premier preceding-sibling est un <style2>.
    Or toi tu vérifies deux fois le premier preceding-sibling, et tu vérifies à chaque fois que c'est un <style1>. Ce n'est pas ce que tu veux, et de toute façon ça n'a pas d'intérêt de vérifier deux fois la même chose.

    Il est normal que ça ne soit pas "évident." Toutefois, c'est de l'informatique, et ça ne se répète pas comme un perroquet. Évident ou pas, il faut se servir des deux premiers exemples pour comprendre comment faire le 3e. Je vais aider, mais pas faire ton travail.
    Au fait, tu as le droit d'essayer de jouer un peu "ça compte pas" et essayer des trucs, tout en lisant des tutoriels XPath pour essayer de comprendre comment ça marche.

    Je dois mettre quoi à la place de "ma-balise-pour-retrait-..." ? J'ai pas trop compris à quoi ça servait ni à quoi ça correspondait.
    J'ai dû louper un épisode, mais à quel endroit on définit combien de pixels mesurera le retrait?
    Ce sont des questions de HTML, pas de XSLT. Tu mets n'importe quel code qui provoquera un retrait comme celui que tu souhaites.
    Rien ne t'empêche de t'entraîner en faisant un fichier .html tout simple pour voir quel code HTML conviendra.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 47
    Par défaut
    Merci de ta réponse.

    Évident ou pas, il faut se servir des deux premiers exemples pour comprendre comment faire le 3e.
    justement, je comprends pas trop car je sais pas à quoi correspond "self" ni le numéro entre crochets, ni dans quel ordre il faut mettre les "preceding-sibling".
    J'ai cherché un peu sur internet, mais les exemples donnés dans les tutoriels n'ont rien à voir et sont trop compliqués alors je comprends rien.

    Je vais aider, mais pas faire ton travail.
    merci. Mais c'est pas "mon travail", mon travail c'est la linguistique, pas l'informatique. J'ai besoin du xsl pour mettre en forme un dictionnaire et je connais aucun informaticien qui pourrait m'aider, c'est pourquoi je viens ici

    Au fait, tu as le droit d'essayer de jouer un peu "ça compte pas" et essayer des trucs, tout en lisant des tutoriels XPath pour essayer de comprendre comment ça marche.
    j'essaie mais les tutoriels sont souvent trop compliqués pour moi, et je n'ai pas trop le temps d'apprendre tout le xml et le xsl depuis le début.

    Ce sont des questions de HTML, pas de XSLT. Tu mets n'importe quel code qui provoquera un retrait comme celui que tu souhaites.
    Ah ok.

    En tout cas si tu pouvais m'expliquer à quoi correspondent les

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [preceding-sibling::*[1][self::style2]
    surtout self et [1], ça serait super sympa, merci

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Citation Envoyé par pwyll2 Voir le message
    justement, je comprends pas trop car je sais pas à quoi correspond "self" ni le numéro entre crochets, ni dans quel ordre il faut mettre les "preceding-sibling".
    J'ai cherché un peu sur internet, mais les exemples donnés dans les tutoriels n'ont rien à voir et sont trop compliqués alors je comprends rien.
    Ah bah oui mais je t'avais prévenu que le cas général était compliqué. Il nous faudrait plus de concret pour voir si on peut pas faire plus simple dans ton cas.
    Il ne faut pas apprendre les choses directement avec des trucs compliqués, il faut y aller par étape et jouer un peu avec chaque étape, par exemple avec ce tutoriel.
    Personnellement j'ai appris avec un vieux machin obsolète qu'on appelle un "livre." Nommément XML in a Nutshell chez O'Reilly, en français.
    Ma spécialisation je la tiens des specs W3C elles-mêmes, et de pas mal de pratique. Je comprends que ça, ça soit plus dur tout seul.

    L'axe self:: n'est pas abordé dans le tutoriel. self:: est un axe qui ne sélectionne que l'élément courant.

    self::style1 sélectionne l'élément courant si c'est un <style1>, et sinon ne sélectionne rien.
    *[1][self::style1] est une manière fiable de sélectionner le premier élément si c'est un <style1>, et rien sinon.
    a[*[1][self::style1]] est une manière fiable de sélectionner les <a> dont le premier élément est <style1>, et pas les autres <a>

    style1[following-sibling::*[1][self::style2]] est une manière fiable de sélectionner les <style1> qui sont suivi par un <style2> et pas par autre chose.

    Citation Envoyé par pwyll2 Voir le message
    merci. Mais c'est pas "mon travail", mon travail c'est la linguistique, pas l'informatique. J'ai besoin du xsl pour mettre en forme un dictionnaire et je connais aucun informaticien qui pourrait m'aider, c'est pourquoi je viens ici

    [...]

    j'essaie mais les tutoriels sont souvent trop compliqués pour moi, et je n'ai pas trop le temps d'apprendre tout le xml et le xsl depuis le début.
    Les pros aussi ont le droit de venir ici, tu sais.
    Ici l'entraide, c'est pour t'aider à monter en compétences. Pas pour que tu nous dises ce que tu veux obtenir et qu'on te le fasse. Si je venais sur ton domaine d'expertise pour demander de l'aide en disant que je veux pas comprendre de quoi il s'agit, je veux juste le produit fini, je ne serais sûrement pas bien reçu. À moins d'allonger la monnaie, bien sûr.

    Je vois bien que ce n'est pas ce que tu fais : tu ne nous a pas donné tous les détails et tu ne te concentres que sur de petites parties (c'est d'ailleurs à cause de ça que c'est compliqué.)
    Alors ne viens pas dire que tu ne fais pas d'informatique. Tu viens ici en tant qu'informaticien, amateur ou professionnel c'est pas important, mais tu viens en tant qu'informaticien ou pas du tout. Tu as le droit d'être débutant et d'avoir besoin d'apprendre, mais tu viens pour apprendre.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 47
    Par défaut
    Merci. Pour être très précis j'ai ça en xml:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    (autres balises variables)
    <xv>Textexv</xv>
    <xt>Textext</xt>
    <ph>Texteph</ph>
    <xn>Textexn</xn>
    (autres balises variables)
    Je veux que ça donne

    (autres balises variables)
    ___Textexv Textext Texteph
    ___Textexn
    (autres balises variables)

    (j'ai mis des tirets bas mais ce sont des espaces que je veux)


    Pour l'instant j'ai en 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
    <xsl:template match="xv[following-sibling::*[2][self::xt] and  following-sibling::*[3][self::ph]" and following-sibling::*[4][self::xn]]">
      <div style="margin-left: 40px;">
        <xsl:apply-templates/>
      </div>
    </xsl:template>
     
    <xsl:template match="xt[preceding-sibling::*[1][self::xv] and 
    following-sibling::*[2][self::ph] and following-sibling::*[3][self::xn]]">
      <div style="margin-left: 40px;">
        <xsl:apply-templates/>
      </div>
    </xsl:template>
     
     
    <xsl:template match="ph[preceding-sibling::*[2][self::xt] and 
    preceding-sibling::*[1][self::xv] and following-sibling::*[4][self::xn]]">
      <div style="margin-left: 40px;">
        <xsl:apply-templates/>
      </div>
    </xsl:template>
    Quand tu dis que [1] correspond au premier élément, c'est le premier élément de quoi? dans le paragraphe? ou le premier élément à partir de la balise qu'on traite?
    Par exemple si j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xv>bla</xv>
    <xt>bla</xt>
    <ph>bla</ph>
    <xn>bla</xn>
    si je traite "ph", le [1] ça correspondra à xv, le [2] à xt ? et le xn, c'est following-sibling [1]?? ou [4]?


    Autre question : j'ai aussi des paragraphes identiques à ceux-là sauf qu'il n'y a pas de "ph" (sinon on a bien xv, xt et xn à la suite). Qu'est-ce que je dois modifier dans mon xsl? Est-il possible de définir la mise en forme des paragraphes sans tenir compte de "ph" (sachant que des fois il n'y est pas)?



    Pour l'instant j'ai écrit ç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
    <xsl:template match="xv[following-sibling::*[1][self::xt]]">
     
              <div style="margin-left: 40px;"><b>
        <xsl:apply-templates/>
     
              </b></div><xsl:text> </xsl:text>
     
    </xsl:template>
     
     
     
    <xsl:template match="xt[following-sibling::*[1][self::ph]]">
     
              <div style="margin-left: 40px;"><b>
                   <xsl:apply-templates/> 
              </b></div><xsl:text> </xsl:text>
     
    </xsl:template>
     
     
     
    <xsl:template match="xn[preceding-sibling::*[1][self::ph]]">
     
     
                   <br/><div style="margin-left: 40px;">
    <xsl:apply-templates/></div>
     
              <xsl:text> </xsl:text>
     
    </xsl:template>
    Mais qd j'ouvre mon fichier XML ça me dit : Le mot clé xsl:stylesheet ne doit pas contenir les noeuds PCDATA.



    Merci d'avance...

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 47
    Par défaut
    Quelqu'un saurait?
    Merci beaucoup

Discussions similaires

  1. alterner les couleurs dans un tableau avec xsl
    Par Eithelgul dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 04/05/2015, 00h29
  2. Retrait/Indentation des paragraphes
    Par Heiddi dans le forum Mise en forme
    Réponses: 2
    Dernier message: 28/08/2011, 09h09
  3. Réponses: 2
    Dernier message: 19/03/2008, 18h38
  4. Paragraphe sans retrait
    Par zafo dans le forum Mise en forme
    Réponses: 7
    Dernier message: 27/02/2007, 16h05
  5. [CSS] Retrait de paragraphe
    Par Phenomenium dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 22/10/2005, 12h09

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