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 :

Besoin astuce : application recursive


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 39
    Points : 31
    Points
    31
    Par défaut Besoin astuce : application recursive
    Bonjour,

    Mon but est d'écrire dans mon fichier XML des balises HTML, pour qu'elles soient ensuite interprétées par mon brower.

    Mon fichier XML ressemblerait à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <text>
         Ceci est un <b>texte</b> qui provient du <u><i><b>fichier XML</b></i></u> que je voudrais presque recopier sauf qu'il y a des balises <tag>etrangeres</tag> à interpréter au milieu...
    </text>
    Je n'arrive pas à écrire le XSL qui gère la récursivité des balises : cela marche sur les balises de premier niveau, mais pas lorsqu'elles sont imbriquées.

    Pourriez vous m'aider ? Merci

  2. #2
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    La profondeur variable d'éléments se gère en XSLT au moyen de templates que l'on déclenche à un niveau par un ordre <xsl:apply-templates>

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    Le problème qu'il y a c'est que je dois appliquer les templates dans l'ordre où ils apparaissent à l'endroit où ils apparaissent comme dans l'exemple ci dessus

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    un <xsl:apply-templates select="*"> déclanchera les templates définis dans le xsl-t dans l'ordre d'apparition dans le xml source.
    Si chaque template fait lui même des apply-templates, pas de pb de récursivité.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    oui mais le problème qu'il y a est que je voudrais appliquer des <xsl:value-of select="."/> au milieu sans savoir quand je dois les mettre et quand je dois faire des apply-templates...

    tu comprends ?

    <xsl:apply-templates select="*"/> applique effectivement tous les templates dans leur ordre d'apparition mais il me manque la possibilité de juste recopier le contenu.

    une idée ?

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Bon voila un xsl qui recopie la source xml en entrée :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" 
    	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    	>
    	
    	<xsl:template match="/"> 
    		<xsl:copy> 
    			<xsl:apply-templates select="comment() | processing-instruction() | * | comment() | text()"/> 
    		</xsl:copy>		
    	</xsl:template>
    
           <xsl:template match="toto"> 
    		<titi> 
    			<xsl:value-of select="."/> 
    		<titi>		
    	</xsl:template>
    	
    			
    	<xsl:template match="@* | * | comment() | processing-instruction() | text()"> 
    		<xsl:copy> 
    			<xsl:apply-templates select="@* | * | comment() | processing-instruction() | text()"/> 
    		</xsl:copy> 
    	</xsl:template> 
      
     </xsl:stylesheet>
    La partie en gras, prendra la priorité sur la recopie et changera toute balise "toto" en "titi" contenant éventuellement du texte, et cela, quelque soit son niveau dans le xml source.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    effectivement ça marche pas mal j'ai le fichier xml suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="utf-8"?>
    <?xml-stylesheet type="text/xsl" href="essai.xsl"?>
    <text>
         Ceci est un <b>texte</b> qui provient du <u><i><b>fichier XML</b></i></u> que je voudrais presque recopier sauf qu'il y a des balises <toto>etrangeres</toto> a interpreter au <b>milieu</b>...
    </text>
    le xsl suivant :

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
    	<xsl:output method="html" encoding="utf-8" indent="yes"  />
     
    	<xsl:template match="/"> 
    		<xsl:copy> 
    			1<xsl:apply-templates select="comment() | processing-instruction() | * | comment() | text()"/> 
    		</xsl:copy>		
    	</xsl:template>
     
        <xsl:template match="toto"> 
    		$<xsl:apply-templates select="*"/>$
    	</xsl:template>
     
        <xsl:template match="u">  
    		|<xsl:apply-templates select="*"/>|
    	</xsl:template>
     
        <xsl:template match="i"> 
    		?<xsl:apply-templates select="*"/>?
    	</xsl:template>
     
        <xsl:template match="b"> 
    		!<xsl:apply-templates select="*"/>!
    	</xsl:template>
     
     
    	<xsl:template match="@* | * | processing-instruction() | comment() | text()"> 
    		<xsl:copy> 
    			2<xsl:apply-templates select="@* | * | comment() | processing-instruction() | text()"/> 
    		</xsl:copy> 
    	</xsl:template> 
     
    </xsl:stylesheet>
    et le résultat est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1 2 Ceci est un !! qui provient du | ? !! ? | que je voudrais presque recopier sauf qu'il y a des balises $$ a interpreter au !! ...
    ce qui montre bien qu'il passe par les bons templates, c'est parfait.

    Mon souci est que je n'arrive pas (je suis débutant excusez moi) à afficher le contenu des balises. Si vous avez une précision à apporter...

    merci!

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:template match="i"> 
    		?<xsl:value-of select="text()"/><xsl:apply-templates select="*"/>?
    	</xsl:template>
     
        <xsl:template match="b"> 
    		!<xsl:value-of select="text()"/><xsl:apply-templates select="*"/>!
    	</xsl:template>

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    merci ça marche super!

    dernière question : est-il possible de faire quelque chose du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="utf-8"?>
    <?xml-stylesheet type="text/xsl" href="essai.xsl"?>
    <text>
         Ceci est un <b>texte</b> qui provient du <u>fichier <i><b>XML</b></i></u> que je voudrais presque recopier sauf qu'il y a <toto>des <tata>balises</tata> etrangeres</toto> a interpreter au <b>milieu</b>...
    </text>
    c'est à dire avec des templates qui se baladent au milieu du texte ?

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Heu, je comprend rien à la question.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    le problème est que si j'ai par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <text> ... <b> du texte en gras avec un bout <u>souligné</u> au milieu</b> ... </text>
    ton template ne marche pas, il met d'abord le texte, et ensuite le résultat du template u. je ne sais pas je suis fatigué peut-être...

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Qu'as tu en xml source, que veux-tu en html de sortie (je veux voir les balises).

  13. #13
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    Le but de ma balise est de mettre en forme du texte comme si on tapait de l'HTML, avec des balises qui lui ressemblent :

    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
    <text>
    <t/>Pour afficher des <i>informations</i> <u>d'aide</u> dans cette <i>fenêtre</i>, cliquez sur un sujet
    <u>dans <b>le</b> panneau</u> <abbr id="sommaire.xml">Sommaire</abbr> sur le côté. Cliquez sur le petit
    plustriangle à côté
    d'un sujet pour voir ses sous-sujets.<br/><br/>
    <t/>Pour rechercher de l'aide <b>sur un <u>sujet</u> particulier</b>, entrez juste un mot ou une phrase dans
    la barre <abbr id="rechercher.xml">Rechercher</abbr> pour voir les sujets s'y rapportant. Cliquez sur un
    titre de sujet pour le lire. Si votre recherche ne retourne aucun sujet d'aide, essayez
    d'entrer moins de mots ou une combinaison différente de mots. Les résultats
    seront affichés directement dans le panneau <abbr id="rechercher.xml">Rechercher</abbr> au cours de
    la frappe. <font class="warning">Pour afficher à nouveau le panneau</font> 
    <abbr class="warning" id="sommaire.xml">Sommaire</abbr>, 			
    <u><i>cliquez sur le bouton de fermeture du panneau </i></u> de <font size="18px" color="red" font-style="normal" font-weight="normal" font-family="Arial">
    recherche</font>, supprimez ce qui se trouve dans la barre
    de <p text-align="center">recherche</p>, ou appuyez sur Echap.<br/><br/>
    <t/>Pour obtenir des <b>informations</b> reliées au sujet d'aide que vous
    êtes en train de lire, cliquez sur les liens dans la fenêtre
    d'aide, comme vous le feriez avec les liens d'une page Web ordinaire. <warning>Vous pouvez
    également vous déplacer en avant ou en arrière parmi les pages
    que vous avez déjà lues à l'aide des boutons Précédente
    et Suivante.</warning><br/><br/><br/>Vous aurez même un petit chapitre sur la <link dest="Navigation par onglets">Navigation par 
    onglets</link> ou aussi à la <link dest="Utilisation de Mozilla Firefox_3.">Navigation par Onglets</link>, <font font-style="italic" underline="underline" font-weight="bold" font-family="Verdana">ce qui est 
    quand même top!</font>
    </text>
    Ce serait un exemple de texte à formater. Tes templates sont quasiment parfaits sauf les cas où je me retrouve avec "Pour rechercher de l'aide <b>sur un <u>sujet</u> particulier</b>, entrez juste un mot" où tu vois que les balises "<u>" sont au milieu du texte, lui même entres balises "<b>", elles-mêmes au milieu du texte des balises "<text>" etc...

    La sortie voulue est du HTML et du PDF (dc la simple recopie ne marche pas).

    L'idée est de souligner ce qui se trouve entre "u", mettre en gras ce qui se trouve entre "b", etc...

    veux-tu aussi mes templates XSL ?

  14. #14
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    La clef c'était de faire des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="*|text()"/>
    Pour une sortie html :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:output method="html" encoding="utf-8" indent="yes"/>
      <xsl:template match="/">
        <html>
          <body>
            <xsl:copy>
              <xsl:apply-templates select="comment() | processing-instruction() | * | comment() | text()"/>
            </xsl:copy>
          </body>
        </html>
      </xsl:template>
      <xsl:template match="text">
        <p>
          <xsl:apply-templates select="*| text()"/>
        </p>
      </xsl:template>
      <xsl:template match="abbr">
        <a href="{@id}"><xsl:copy-of select="@*"/>
          <xsl:apply-templates select="* | text()" />
        </a>
      </xsl:template>
      <xsl:template match="link">
        <a href="{@dest}">
          <xsl:apply-templates select="*|text()"/>
        </a>
      </xsl:template>
      <xsl:template match="@* | * | processing-instruction() | comment() | text()">
        <xsl:copy>
          <xsl:apply-templates select="@* | * | comment() | processing-instruction() | text()"/>
        </xsl:copy>
      </xsl:template>
    </xsl:stylesheet>

  15. #15
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    Et bien je n'ai qu'un mot à dire : merci beaucoup! Cela marche impeccable.

    Bonne continuation

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

Discussions similaires

  1. [VB6]besoin d'aide pour modifier une application
    Par mister perfect dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 19/05/2006, 11h46
  2. Réponses: 19
    Dernier message: 10/05/2006, 09h40
  3. Besoin de conseils sur une application
    Par Jim_Nastiq dans le forum Langage
    Réponses: 12
    Dernier message: 12/04/2006, 12h43
  4. Application à réparer... besoin d'infos...
    Par charleshbo dans le forum Access
    Réponses: 6
    Dernier message: 17/03/2006, 07h09
  5. Besoin de conseils pour une application
    Par peredodu dans le forum Access
    Réponses: 9
    Dernier message: 05/03/2006, 11h18

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