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 :

[XSLT] xsl:copy-of ou bien xsl:apply-templates


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 23
    Par défaut [XSLT] xsl:copy-of ou bien xsl:apply-templates
    Bonjour,
    J'ai un fichier XML qui contient disons quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <toto>
        blabla
        <m:math>blabla</m:math>
        blabla
        <bob>blabla</bob>
        blabla
    </toto>
    Je veux le transformer en un fichier XHTML de sorte que tout le contenu de toto soit restitué tel quel (en particulier <m:math>blabla</m:math> qui est du MATHML) sauf <bob>blabla</bob> qui doit subir une transformation.

    Or si j'essaye dans toto un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:copy-of select="."/>
    mon code MATHML s'affiche bien mais évidemment bob n'est pas transformé.

    Tandis que si j'essaye dans toto un :
    bob est transformé mais mon MATHML n'est plus correctement recopié.

    Que faire ?

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ce qu'il faut faire, c'est <xs:apply-templates/>, mais il faut penser à faire

    - un template sur bob,
    - un template sur tout ce qui doit subir un traitement particulier,
    - un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xs:template match="*|@*">
      <xs:copy>
        <xs:apply-templates select="*|@*"/>
      </xs:copy>
    </xs:template>
    Pour copier tout le reste tel que (en appliquant les traitements particuliers de bob à leurs enfants bob.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 23
    Par défaut
    Merci, mais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xs:template match="*|@*">
      <xs:copy>
        <xs:apply-emplates select="*|@*"/>
      </xs:copy>
    </xs:template>
    ne me donne que les attributs de <m:math> et de ses enfants.

    J'ai aussi essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xs:template match="*|@*">
      <xs:copy>
        <xs:apply-templates/>
      </xs:copy>
    </xs:template>
    qui me donne tout sauf les attributs !

    Comment faire pour que les <m:math>blabla</m:math> soient intégralement copiés ?

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ah, pardon, j'ai pas assez testé ce que je disais.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xs:template match="node()|@*">
      <xs:copy>
        <xs:apply-templates select="node()|@*"/>
      </xs:copy>
    </xs:template>
    Devrait mieux marcher.

    (Ça marche aussi avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xs:template match="*|@*">
      <xs:copy>
        <xs:apply-templates select="@*"/>
        <xs:apply-templates/>
      </xs:copy>
    </xs:template>
    )
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 23
    Par défaut
    Ça marche ! Merci Thelvin.

    PS. Pourquoi "xs:" et pas "xsl:" dans le code ?

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par pbernard Voir le message
    PS. Pourquoi "xs:" et pas "xsl:" dans le code ?
    Pourquoi pas ? Ce n'est qu'un préfixe.

    Personnellement, je préfère garder des préfixes très courts. Même, quand c'est pas trop gênant, je le mets carrément en namespace par défaut.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [XSLT] traitement de chaine via Variable et apply-templates
    Par jdriele dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 15/11/2010, 10h08
  2. Réponses: 2
    Dernier message: 28/11/2009, 23h20
  3. [XSLT] Supprimer saut de ligne dans un xsl:copy
    Par chris1024fr dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 29/09/2009, 17h34
  4. [XSLT] xsl:sort + apply-templates
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 04/10/2007, 17h52
  5. [xsl] alterner de style entre deux apply-template
    Par laouache dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 23/04/2004, 11h49

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