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

XML/XSL et SOAP Discussion :

Problème avec XSLT et du XML contenant des balises HTML


Sujet :

XML/XSL et SOAP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Février 2010
    Messages : 10
    Points : 17
    Points
    17
    Par défaut Problème avec XSLT et du XML contenant des balises HTML
    Bonjour,

    Je cherche à réaliser un site web à l'aide du couple XML/XSLT.
    Une partie de mon fichier XML comporte du formatage HTML, cependant lors de la mise en forme, les balises html sont tout simplement ignorées. J'ai donc trouvé une première solution qui me permet de ne pas ignorer les balises de "premier niveau", cependant il semble impossible de faire du récursif:

    Error during XSLT transformation: XSLT Stylesheet (possibly) contains a recursion.
    Le document XML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
     
    <documentation>
      <champ1>
        <htmlContent>
         <tr>
           <td>1</td>
           <td>2</td>
         </tr>
        </htmlContent>
      </champ1>
    </documentation>

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" encoding="UTF-8" standalone="no" media-type="text/html"/>
     
    <xsl:template match="htmlContent//*">
    <xsl:element name="{name()}" attribute="">
     
     <xsl:for-each select="./@*">
      <xsl:attribute name="{name()}">
       <xsl:value-of select="." />
      </xsl:attribute>
     </xsl:for-each>
     
     <xsl:if test="count(./*) > 0">
      <xsl:apply-templates select="."/>
     </xsl:if>
     <xsl:if test="count(./*) = 0">
      <xsl:value-of select="."/>
     </xsl:if>
     
    </xsl:element>
    </xsl:template>
     
    [ ... ]
    Que pensez vous de cette méthode, voyez vous un moyen de répondre au problème?

    Merci d'avance pour vos réponses constructives.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Citation Envoyé par xamber Voir le message
    Que pensez vous de cette méthode, voyez vous un moyen de répondre au problème?
    Il ne faut pas faire apply-templates avec un select sur le nœud en cours, puisque c'est justement le nœud pour lequel tu es en train d'appliquer un template. C'est sans fin, d'où l'erreur de récursion.

    Il faut faire :

    Qui est équivalent à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="node()"/>
    Autrement dit, ça applique les templates à tous les fils de l'élément courant, mais pas à l'élément courant lui-même (on ne le veut pas puisqu'on est déjà en train de lui appliquer le template.)

    Remarques annexes :

    - Dans <xsl:element name="{name()}" attribute="">, le attribute="" n'est pas valide et ne veut rien dire. De toute façon, il vaudrait mieux remplacer <xsl:element> par <xsl:copy>, qui copie le nœud avec son nom.

    - Le for-each sur les attributs est plus facile à faire avec un appy-templates sur @* et un template qui les reconnaît et se contente de faire <xsl:copy/> dessus.

    - Les deux if à la fin sont inutiles : on voudra toujours faire le apply-templates, et si l'élément n'a pas de fils, ça ne fera rien et puis c'est tout.
    Le deuxième if n'a pas d'effet, qu'il s'applique ou non.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Février 2010
    Messages : 10
    Points : 17
    Points
    17
    Par défaut
    Merci beaucoup de ton aide thelvin.

    Aprés avoir suivi tes conseils, voici le résultat, qui semble fonctionner parfaitement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <xsl:template match="htmlContent//*">
     <xsl:copy>
      <xsl:apply-templates select="./@*"/>
      <xsl:apply-templates/>
     </xsl:copy>
    </xsl:template>
     
    <xsl:template match="htmlContent//@*">
     <xsl:copy>
      <xsl:value-of select="."/>
     </xsl:copy>
    </xsl:template>

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/05/2014, 20h52
  2. Parser du XML contenant des balises HTML
    Par romuluslepunk dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/11/2011, 23h42
  3. XML interprétation des balises HTML
    Par poypoy31240 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 31/05/2010, 14h21
  4. Réponses: 10
    Dernier message: 10/10/2009, 18h39
  5. problème xsl : inclure une donnée xml dans une balise html
    Par djodjo dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 03/01/2003, 09h24

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