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 :

contenu textuel + balise [XSL-FO]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Points : 66
    Points
    66
    Par défaut contenu textuel + balise
    Bonjour,

    j'ai un problème avec mon contenu textuel.
    Mon XML est de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <PARA>Ma liste :<LISTE><ITEM>Test1</ITEM><ITEM>Test2</ITEM></LISTE></PARA>
    Je voudrais qu'elle apparaissent de la forme :

    Ma liste :
    Test1
    Test2

    Mon code est comme cela :
    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
    <xsl:template match="PARA">
    <fo:block>
    <xsl:apply-template/>
    </fo:block>
    </xsl:template>
     
    <xsl:template match="LISTE">
     
    <xsl:apply-template/>
     
    </xsl:template>
     
    <xsl:template match="ITEM">
    <fo:block>
    <xsl:apply-template/>
    </fo:block>
    </xsl:template>
    donc mon fo produit est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <fo:block>Ma liste :<fo:block>Test 1</fo:block><fo:block>Test 1</fo:block></fo:block>
    Donc "Ma liste" pose problème (j'ai des messages d'erreur de la forme:
    appended element has incompatible content model (parent content model: inlineModel, appended element content model; BlockModel).
    parent element : fo:block
    Appended element : fo:block
    je suppose que c'est elle car elle est pas elle même dans un fo:block comment puis-je régler cela à votre avis?

    Merci par avance de votre réponse.

  2. #2
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 843
    Points
    4 843
    Par défaut
    Essaye plutôt comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <fo:block>
      <fo:block>Ma liste :</fo:block>
      <fo:block>Test 1</fo:block>
      <fo:block>Test 2</fo:block>
    </fo:block>

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Points : 66
    Points
    66
    Par défaut
    Bonjour,

    Merci de ta réponse, je suis d'accord avec toi c'est exactement ce que je voudrais avoir mais comment puis-je l'avoir étant donnée que "Ma liste" n'est pas une balise toute seule? Je peut pas l'encadrer d'un fo:block si je ne peut pas la traiter.

    Merci par avance de vos réponses futures

  4. #4
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 843
    Points
    4 843
    Par défaut
    Ah !

    Ben là c'est simple, dans ton template PARA, tu peux récupérer le texte contenu dans l'élément via <xsl:value-of select="text()"/>.

    Par contre tes "<apply-templates/>" me paraissent pour le moins étrange...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Points : 66
    Points
    66
    Par défaut
    Merci de ta réponse,
    j'essaye cela tout de suite, mais pour information en quoi mes <xsl:apply-templates/> te paraissent-ils étranges?

    Et si j'ai du texte avant ( comme dans ce cas) et après aussi. comme là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <PARA>Ma liste :<LISTE><ITEM>Test1</ITEM><ITEM>Test2</ITEM></LISTE></PARA> Texte ici aussi
    sa va me faire quelque chose de bizarre style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <fo:block>
      <fo:block>Ma liste : Texte ici aussi</fo:block>
      <fo:block>Test 1</fo:block>
      <fo:block>Test 2</fo:block>
    </fo:block>
    Non?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Points : 66
    Points
    66
    Par défaut
    Cela me fait bien cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <fo:block>
      <fo:block>Ma liste : Texte ici aussi</fo:block>
      <fo:block>Test 1</fo:block>
      <fo:block>Test 2</fo:block>
    </fo:block>
    les deux textes se suivent. As-tu une autre idée stp?

  7. #7
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 843
    Points
    4 843
    Par défaut
    Si tu as du texte avant et après je ne vois qu'une solution : un for-each :
    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
    <xsl:template match="PARA">
    	<fo:block>
    		<xsl:for-each select="node()">
    			<xsl:apply-templates select="."/>
    		</xsl:for-each>
    	</fo:block>
    </xsl:template>
     
    <xsl:template match="PARA/text()">
    	<fo:block>
    		<xsl:value-of select="."/>
    	</fo:block>
    </xsl:template>
     
    <xsl:template match="LISTE">
    	<xsl:apply-templates/>
    </xsl:template>
     
    <xsl:template match="ITEM">
    	<fo:block>
    		<xsl:value-of select="."/>
    	</fo:block>
    </xsl:template>
    Sinon tes apply-templates me semblent étranges dans le sens où apparement tout élément texte est récupéré. Il doit donc y'avoir un template qui récupère les noeuds et affiche le contenu textuel. C'est assez "dangereux" je dirais vu que tu ne contrôles pas ton XSL.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Points : 66
    Points
    66
    Par défaut
    merci de ta réponse précise, le for-each était une bonne idée.

    Pour le reste j'ai toujours la même erreur si je met

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:template match="ITEM">
        <fo:block>
            <xsl:value-of select="."/>
        </fo:block>
    </xsl:template>
    alors que si je met cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:template match="ITEM">
     
            <xsl:value-of select="."/>
     
    </xsl:template>
    je n'ai plus d'erreur mais je n'arrive pas au résultat voulu, je vais essayer de bidouiller mais je comprend pas pourquoi j'ai cette erreur.

    merci encore de ta réponse

  9. #9
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 843
    Points
    4 843
    Par défaut
    Tu peux montrer ton code ? (d'ailleurs c'est une constante si tu veux de l'aide, montrer son code c'est mieux)

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Points : 66
    Points
    66
    Par défaut
    Bonjour,

    merci pour tes réponses.
    Pour le code c'est ce que je t'ai envoyé (en simplifier mais conforme à ceux que j'ai).

    Sinon j'ai réussi, j'avais des petits problèmes de boucle infini, que j'ai réglé (mais c'était de ma faute) en tout cas merci de ton aide, l'élément qui m'a permis de m'en sortir principalement est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:template match="PARA/text()">
    	<fo:block>
    		<xsl:value-of select="."/>
    	</fo:block>
    </xsl:template>
    Encore merci de tes réponses.

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

Discussions similaires

  1. Tester le contenu textuel des balises XML?
    Par Marian83 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 14/04/2009, 12h34
  2. Extraire le contenu des balises XML
    Par calimero2611 dans le forum Modules
    Réponses: 7
    Dernier message: 12/06/2006, 15h09
  3. Parcours d'un SVG et récupération du contenu textuel
    Par Herode dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/05/2006, 09h34
  4. [HTML] affichage du contenu des balises 'alt' dans une iframe
    Par etarip dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 11/08/2005, 14h08
  5. [DOM] Accès au contenu textuel d'un noeud avec DOM
    Par comexe2 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 16/07/2004, 15h41

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