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 :

[XPATH] Problème récupération élément imbriqué.


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre habitué Avatar de Mygush
    Inscrit en
    Juin 2007
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 226
    Points : 175
    Points
    175
    Par défaut [XPATH] Problème récupération élément imbriqué.
    Bonjour à tous,
    Voilà je souhaite simplifier un fichier xml à l'aide de XSLT. Jusque là tout va bien seulement j'ai un soucis pour récupérer un élément imbriqué, je m'explique :
    J'ai un code xml du style :
    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
    <p rsidR="00EA21B1" rsidRPr="00883B7C" rsidRDefault="00EA21B1" rsidP="00883B7C">
    	<pPr>
    		<pStyle val="TitreEtude"/>
    	</pPr>
    	<r rsidRPr="00883B7C">
    		<rPr>
    			<lang w:val="en-GB"/>
    		</rPr>
    		<t>IV. Smoothing effect of PULPACTYL</t>
    	</r>
    	<r w:rsidRPr="00883B7C">
    		<rPr>
    			<rStyle w:val="Exposant"/>
    		</rPr>
    		<t>®</t>
    	</r>
    </p>
    Et un code XSLT du style :

    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
    <xsl:template match="document/body">
    		<body>
    			<!-- Pour chaque paragraphe trouvé -->
    			<xsl:for-each select="p">
    					<xsl:choose>
    						<!-- Vérifie si la balise existe -->
    						<xsl:when test="pPr/pStyle">
    							<!-- Se positionne à l'endroit souhaité dans l'arbre actuel -->
    							<xsl:apply-templates select="pPr/pStyle" />
    						</xsl:when>
    						<!-- Si la balise n'est pas trouvé -->
    						<xsl:otherwise>
    							<!-- Création d'un élément avec comme nom le style par défaut -->
    							<Style_Defaut>
    								<!-- Se positionne sur la balise contenant le texte souhaité -->
    								<xsl:apply-templates  select="r/t" />
    							</Style_Defaut>
    						</xsl:otherwise>
    					</xsl:choose>			
    			</xsl:for-each>
    		</body>
    	</xsl:template>
     
    	<xsl:template match="pPr/pStyle">
    		<!-- Création d'un élément avec comme nom le style utilisé -->
    		<xsl:element name="{@val}">
    			<xsl:choose>
    				<xsl:when test="r/rPr/rStyle">
    					<xsl:element name="{@val}">
    						<!-- Se positionne sur la balise contenant le texte souhaité -->
    						<xsl:apply-templates  select="../t" />
    					</xsl:element>
    				</xsl:when>
    				<xsl:otherwise>
    					<xsl:apply-templates  select="../../r/t" />
    				</xsl:otherwise>
    			</xsl:choose>
    		</xsl:element>
    	</xsl:template>
    En fait c'est la partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <rPr>
    <rStyle w:val="Exposant"/>
    </rPr>
    <t>®</t>
    de mon code xml qui me pose problème.
    En effet je souhaiterai pouvoir construire un fichier du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <TitreEtude>
    	IV. Smoothing effect of PULPACTYL<Exposant>®</Exposant>
    </TitreEtude>
    Mais je n'arrive pas à reproduire l'élément <Exposant> et j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <TitreEtude>
    	IV. Smoothing effect of PULPACTYL®
    </TitreEtude>
    Est-ce que quelqu'un peut m'aider à ce sujet ?
    Merci d'avance pour vos réponses.

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    ce serait plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xsl:when test="../..r/rPr/rStyle">

  3. #3
    Membre habitué Avatar de Mygush
    Inscrit en
    Juin 2007
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 226
    Points : 175
    Points
    175
    Par défaut
    Effectivement en mettant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:when test="../../r/rPr/rStyle">
    	<xsl:element name="{../../r/rPr/rStyle/@val}">
    ça va beaucoup mieux. Merci pour le coup de pouce.
    En revanche, je n'arrive pas à dissocier le contenu de mes deux balises. En effet j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <TitreEtude>
    	<Exposant>IV. Smoothing effect of PULPACTYL®</Exposant>
    </TitreEtude>
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <TitreEtude>
    	IV. Smoothing effect of PULPACTYL<Exposant>®</Exposant>
    </TitreEtude>
    J'avoue que j'ai un peu de mal à construire ce neud...
    Merci d'avance pour vos réponses.

  4. #4
    Membre habitué Avatar de Mygush
    Inscrit en
    Juin 2007
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 226
    Points : 175
    Points
    175
    Par défaut
    bon finalement après m'être cassé un peu la tête j'ai réussi à obtenir ce que je voulais.
    Voici mon code si ça peut aider quelqu'un :
    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
    <xsl:template match="pPr/pStyle">
    	<xsl:element name="{@val}">
    		<xsl:for-each select="../../r">
    			<xsl:choose>
    				<xsl:when test="rPr/rStyle">
    					<xsl:element name="{rPr/rStyle/@val}">
    						<xsl:apply-templates  select="t" />
    					</xsl:element>
    				</xsl:when>
    				<xsl:otherwise>
    					<xsl:apply-templates  select="t" />
    				</xsl:otherwise>
    			</xsl:choose>
    		</xsl:for-each>
    	</xsl:element>
    </xsl:template>

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/07/2012, 14h53
  2. [XSLT] problème de boucle imbriquée en xsl/xpath
    Par lol88 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 30/10/2009, 18h30
  3. [XSLT] Problème récupération contenu élément !
    Par Mygush dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 22/02/2008, 14h08
  4. Réponses: 2
    Dernier message: 09/03/2006, 15h24
  5. recherche Xpath: problème de casse (majuscule/minuscule)
    Par alexandre54 dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 29/07/2003, 10h42

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