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][XHTML] test sur position de noeuds (text() et autres)


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut [XSL][XHTML] test sur position de noeuds (text() et autres)
    bonjour,
    voila je parse mon xhtml dont je ne connais pas la structure. Je dois y effectuer un certain nbre de traitements en gardant le meme ordre de balise et texte.
    dans un template j ai ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:for-each select="*">			
    				<xsl:choose>
    					<xsl:when test="name()='a' 
    											or name()='br'
    											or name()='b' 
    											or text() ">
    									<xsl:apply-templates select="."/>.....
    J ai un template pour le texte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="text()">
        <xsl:copy-of select="."/>
    </xsl:template>
    Or je ne passe jamais ds ce template
    Probleme de namespace? probleme avec le select "." ?
    une idée?

    en tout cas si au dessus du for-each j'ecris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="text()"/>
    alors je récupère bien le texte mais avant les autres nodes...
    Merci

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Au lieu de faire comme ca fait plutot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:call-template name="toto"/>
    et après tu fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:template name="toto"><xsl:copy-of select="."/> 
    </xsl:template>
    Mais je comprend pas trop le but...

    ++

    Thierry
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  3. #3
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    exemple de code xhtml qui ne passe pas ds mon template
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ....
    					<td width="346" valign="top" style="width:259.4pt;padding:0cm 7.35pt 0cm 7.35pt">
    						<p class="maclasse">
    							texte1
    							<span style='font:7.0pt "Times New Roman"'>texte ds un node enfant
     
    							</span>
    							texte2
    						</p>
    					</td>
    ...
    avec mon code seul le texte du noeud enfant ressort (car j applique a ce node un autre template).

    Merci virgul mais ce n est pas bon dans le sens ou je dois faire des traitements sur les noeuds enfants aussi... ce n est pas une simple copie

    En résumé si le premier noeud est un text() alors je copie le texte en sortie.
    Puis si c un node() d un autre type je lance un autre traitement spécifique à ce node et ainsi de suite.

  4. #4
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    j ai trouvé et je mets la solution ici pour ceux qui auront les memes problemes.

    en fait lorsque l on fait un for-each select="*"
    chaque noeud devient le nom courant donc faire un test du type
    <xsl:if test="text()"/> revient à demander si l enfant du noeud courant est text() alors que c est le noeud courant qui nous interesse

    donc il faut faire le test sur
    test="self::text()"

    et voila

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

Discussions similaires

  1. Test sur tous les noeuds d'un graph
    Par mark92 dans le forum Tcl/Tk
    Réponses: 0
    Dernier message: 19/12/2012, 15h48
  2. [XSL 1.0] copie d'un noeud texte d'un document à un autre
    Par Frantz69 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 05/04/2009, 15h20
  3. Réponses: 4
    Dernier message: 31/10/2008, 07h46
  4. [XSLT] <xsl:if> test sur plusieurs condition
    Par oxilab dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 30/06/2006, 20h30
  5. test sur une zone de texte
    Par vaness59199 dans le forum ASP
    Réponses: 5
    Dernier message: 06/06/2006, 21h04

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