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 :

ignorer/conserver les tags html [XSL-FO]


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 61
    Par défaut ignorer/conserver les tags html
    Salut à tous,

    j´ai un fichier xml contenant par endroit des tags html que j´aimerais conserver après transformation. Comment demander au processeur xsl-fo d´ignorer ces noeuds?
    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <submission>
    <abstract>
    <p>Introduction: blablabla.</p>
    Bonjour à tous.
    <b>Merci, Merci</b>
    </abstract>
    </submission>
    J´aimerais avoir comme résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <p>Introduction: blablabla.</p>
    Bonjour à tous.
    <b>Merci, Merci</b>
    Pour cela, j´ai créé un match sur submission, puis écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <fo:block font-family="Times" font-size="12pt"
    linefeed-treatment="preserve"
    white-space-treatment="preserve"
    white-space-collapse="false">
    <xsl:copy-of select="abstract/text()"/>
    </fo:block>
    Mais j´obtiens juste le PCDATA ie:
    Bonjour à tous.

    Merci pour votre aide.
    Sylvie

  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
    /text(), comme son nom l'indique, ne va sélectionner que des textes, donc aucune balise.
    De plus, l'emploi de / fait qu'il ne sélectionnera que ceux qui sont immédiatement sous l'élément courant, et rien d'autre.

    Pour sélectionner à la fois texte, balise, et en fait tout, il faut utiliser node(), pas text().
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 61
    Par défaut
    Oui merci Thelvin. J´ai aussi essayé cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <fo:block font-family="Times" font-size="12pt"
    linefeed-treatment="preserve"
    white-space-treatment="preserve"
    white-space-collapse="false">
    <xsl:copy-of select="abstract/node()"/>
    </fo:block>
    et en xsl-fo, j´obtiens toujours le même résultat: Bonjour à tous.

    Ce qui est curieux, c´est qu´en appliquant un simple script xslt (et pas xsl-fo) au même fichier xml, j´obtiens exactement ce que je veux en utilisant node().
    Mais moi j´ai besoin de xsl-fo, vu que je dois formater la majorité des éléments.
    Comment faire en sorte que le processeur apache FOP préserve les sous-noeuds en copiant tout simplement?

    Merci.

  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
    Moi j'obtiens

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <fo:block font-family="Times" font-size="12pt"
    linefeed-treatment="preserve"
    white-space-treatment="preserve"
    white-space-collapse="false">
    <p>Introduction: blablabla.</p>
    Bonjour à tous.
    <b>Merci, Merci</b>
    </fo:block>
    Tu dis que tu obtiens autre chose ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    @sylvie
    Puisqu'il y des règles qui gouvernent ceux qui sont admis comme enfants de fo:block, il n'est jamais valable en codant les xsl:copy-of comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        <!-- pas xsl-fo valable -->
        <xsl:copy-of select="abstract/p|abstract/b|abstract/text()" />
    [1] Ce que vous entendez faire, c'est ce qu'on appelle l'opération de serialization. Pour les cas assez simples et une besoin de temps en temps seulement, vous pouvez faire bêtement comme ça et je crois il est suffisant pour votre cas parce que les p et b sont des éléments simples.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <fo:block font-family="Times" font-size="12pt"
        linefeed-treatment="preserve"
        white-space-treatment="preserve"
        white-space-collapse="false">
        <xsl:apply-templates select="abstract/p|abstract/b|abstract/text()" mode="serialize" />
    </fo:block>
    [1.1] Et puis vous ajoutez des templates très spécifiques comme ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <xsl:template match="p|b" mode="serialize">
        <xsl:text>&lt;</xsl:text><xsl:value-of select="local-name()" /><xsl:text>&gt;</xsl:text>
        <xsl:value-of select="." />
        <xsl:text>&lt;/</xsl:text><xsl:value-of select="local-name()" /><xsl:text>&gt;</xsl:text>
    </xsl:template>
    <xsl:template match="text()" mode="serialize">
        <xsl:value-of select="." />
    </xsl:template>
    [1.2] Je le fais pour les balises très précises pourque ça ne généralize trop sans nécessité absolue. Vous pouvez facilement le faire avec une portée plus étendue, bien sûr.

    [2] Pour des cas très généralisés et une besoin de le faire très étendue, vous pouvez utilizer des xslt extensions facilement disponibles. Par exemple, pour saxon c'est la fonction d'entension serialize() etc... Je vous laisse la liberté de dépouiller vous-même pour le moment.

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 61
    Par défaut
    Merci à vous deux pour votre aide.
    j´ai fini par me restreindre au xslt avec node().
    C´était aussi bon de faire le test et de savoir que les enfants du fo-block ont des restrictions. L´exemple fourni m´aidera bcp dans un autre chantier .

    Sylvie

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

Discussions similaires

  1. eliminer les tag html
    Par solawe dans le forum C
    Réponses: 7
    Dernier message: 15/11/2006, 15h20
  2. Convertir les tags HTML en entités avant l'ajout dans un document XML et vice versa
    Par JavaEli dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 26/09/2006, 11h36
  3. [STRUTS] les tags html: et l'attribut "id"
    Par treivse dans le forum Struts 1
    Réponses: 2
    Dernier message: 01/08/2006, 08h20
  4. Supprimer les tags HTML
    Par Seth77 dans le forum Langage
    Réponses: 6
    Dernier message: 28/02/2006, 16h48
  5. [XSL] conserver les balises html
    Par krappa dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 07/07/2005, 15h14

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