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 :

Traitement d'un élément au contenu mixte


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau Candidat au Club
    Traitement d'un élément au contenu mixte
    Bonjour,

    J'ai ceci dans mon XML source :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    <p><i>Je suis un vers.</i>  1</p>


    où "1" est le numéro du vers.


    Je voudrais obtenir le résultat suivant :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    <p><i>Je suis un vers.</i></p>


    donc sans le numéro du vers.


    Dans le template concerné, j'ai intégré un <xsl:analyze-string> :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <xsl:analyze-string select="string(.)" regex="^(.+)((\s)(\d+))$">
    	<xsl:matching-substring>
    		<xsl:value-of select="regex-group(1)"/>
            </xsl:matching-substring>
    </xsl:analyze-string>


    Mais le résultat renvoyé n'est que du texte, alors que je voudrais également récupérer les éléments de mise en forme (<i> ici).

    Comment pourrais-je m'y prendre pour récupérer tout le contenu (qui peut être un autre élément ou du texte), sauf le numéro du vers ?

    Merci d'avance pour votre aide.

  2. #2
    Modérateur

    Désolé mais c'est pas générique. Le but de XML c'est d'organiser les données proprement de sorte à ce que tout soit toujours pareil.

    Donc puisque c'est pas ce que tu as, il faut montrer toutes les situations possibles, et les gérer toutes.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau Candidat au Club
    Bonjour,

    Dans la transformation en question, j'ai déjà créé un <xsl:choose> avec les cas possibles, mais c'est le traitement de la situation présentée ici qui me pose problème.

    Comment pourrais-je récupérer l'élément et éventuellement du texte qui ne serait pas le numéro de vers, en respectant l'ordre des différents types de contenu ?

    Merci,

  4. #4
    Membre émérite
    L'écriture simple pour ce genre de structure commune est de par deux simples templates :
    Code xslt1 :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <xsl:template match="p">
        <xsl:copy>
            <xsl:apply-templates select="*" />
        </xsl:copy>
    </xsl:template>
    <xsl:template match="i">
        <xsl:copy>
            <!-- preque d'être par défaut, explicité pour qu'on puisse se faire élaborer. -->
            <xsl:value-of select="." />	
        </xsl:copy>
    </xsl:template>

    Quelle est l'issue générique pour qu'elle est insufficente ?