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 :

Firefox n’interprète pas du html contenu dans du xml


Sujet :

XML/XSL et SOAP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Débutant en XSLT
    Inscrit en
    Avril 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Débutant en XSLT

    Informations forums :
    Inscription : Avril 2011
    Messages : 54
    Points : 32
    Points
    32
    Par défaut Firefox n’interprète pas du html contenu dans du xml
    Bonjour tout le monde,

    Je vais tâcher d'être synthétique pour décrire mon problème :

    1. J'ai un fichier XML qui contient du html sous forme d’entités (contenu issu de CKEDITOR).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="style/ma_feuille.xsl"?>
    <root>
      <content>
    Exemple de &lt;strong&gt;texte en gras&lt;/strong&gt; et les accents comme les &amp;eacute; sont aussi en entit&amp;eacute;s.
      </content>
    ...
    2 J'ai un feuille XLS qui tritouille ce XML pour le mettre en page au format HTML.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
    	<xsl:output method="html" encoding="ISO-8859-1" indent="yes" />
    ...
    3. Ca marche Nickel dans Chrome, mais dans Firefox, le HTML contenu dans mon fichier XML voit ses entitées converties mais non-interprétées.
    Par exemple, il m'affiche les balises "<strong>" en clair... alors que j'attends à voir du gras !


    Avez-vous déjà rencontré ce problème ?
    Sinon, vers quel forum pourrais-je aussi me tourner car de ce que je peux identifier, il semble que là où Chrome est capable de :
    1. Convertir les entités >> 2. Interpréter le code html qui en résulte.
    Firefox lui ne s'arrête qu'à l'étape 1 :S. Je ne sais pas ce qu'il aime pour fonctionner...

    Avez-vous des pistes ?

    Merci d'avance.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par PouetteMan Voir le message
    Ca marche Nickel dans Chrome,
    Ça ressemble à un bug de Chrome, ou alors à l'utilisation de disable-output-escaping.

    Citation Envoyé par PouetteMan Voir le message
    Avez-vous déjà rencontré ce problème ?
    Du HTML dans du XML sous forme d'entités, c'est exactement la même chose que du HTML dans du HTML sous forme d'entités. C'est comme ça que tu as pu poster ton code dans ce forum.

    C'est le comportement normal. Sauf en cas d'utilisation de disable-output-escaping, que Firefox ne gère tout simplement pas.

    Citation Envoyé par PouetteMan Voir le message
    Sinon, vers quel forum pourrais-je aussi me tourner car de ce que je peux identifier, il semble que là où Chrome est capable de :
    1. Convertir les entités >> 2. Interpréter le code html qui en résulte.
    Firefox lui ne s'arrête qu'à l'étape 1 :S. Je ne sais pas ce qu'il aime pour fonctionner...

    Avez-vous des pistes ?
    - Avec disable-output-escaping, Firefox ne le gère pas donc pas la peine d'insister.
    - sans disable-output-escaping, ce que fait Firefox est correct, pas ce que fait Chrome.

    En principe tu devrais avoir quelque chose genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <root>
      <content>
    Exemple de <strong>texte en gras</strong> et les accents comme les &eacute; sont aussi en entit&eacute;s.
      </content>
    ...
    Et ça pourrait facilement se traiter par XSLT.

    Mais avec ce que tu as c'est galère : en gros tu aurais besoin de faire un parseur de balises en XSLT. Pas complètement impossible, mais monstrueusement chiant. On en trouve sûrement sur Internet, mais je ne sais pas avec quels mots-clé.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Débutant en XSLT
    Inscrit en
    Avril 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Débutant en XSLT

    Informations forums :
    Inscription : Avril 2011
    Messages : 54
    Points : 32
    Points
    32
    Par défaut
    Bonjour Thelvin et merci pour ta réponse.

    J'ai testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <root>
        <content>
    	<p>Bonjour je <u>suis</u> en <strong>gras</strong> !</p>
        </content>
    </root>
    Résultat, seul le texte s'affiche "Bonjour je suis en gras !" aussi bien dans Chrome que dans firefox. Il supprime donc les balises, sans les interpréter.

    J'ai aussi essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <root>
        <content>
    	<![CDATA[<p>Bonjour je <u>suis</u> en <strong>gras</strong> !</p>]]>
        </content>
    </root>
    Le html est interprété dans Chrome. Mais dans firefox je vois mon texte et les balises non-interprétées.


    Ma recherche se précise... Firefox peut-il interpréter du html issu d'un d'un XML et affiché via XSLT de ce même xml ?

    J'avoue être en manque de pistes pour creuser...

  4. #4
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Il y'a une différence notable :
    Dans un cas tu as des balises, dans l'autre cas tu as du texte.

    Firefox, comme l'a dit thelvin, a le bon comportement : tu lui dit d'afficher du texte, il affiche du texte.

    Après, si tu veux transformer ce texte en XML/HTML, ça sera à toi de te taper ça à la main et, toujours comme l'a dit thelvin, en XSLT ce sera pas la joie...

    Par contre tu peux contourner ton problème en faisant un truc très moche en javascript : charger dynamiquement le contenu en utilisant un innerHTML :
    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
    <xsl:template match="/root">
    	<html>
    		<head>
    			<script type="text/javascript">
    				function fillContent(id, content) {
    					var container = document.getElementById(id);
    					container.innerHTML += content;
    				}
    			</script>
    		</head>
    		<body>
    			<div id="container"></div>
    			<script type="text/javascript">
    				fillContent('container', '<xsl:value-of select='content'/>');
    			</script>
    		</body>
    	</html>
    </xsl:template>

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par PouetteMan Voir le message
    J'ai testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <root>
        <content>
    	<p>Bonjour je <u>suis</u> en <strong>gras</strong> !</p>
        </content>
    </root>
    Résultat, seul le texte s'affiche "Bonjour je suis en gras !" aussi bien dans Chrome que dans firefox. Il supprime donc les balises, sans les interpréter.
    Attention, cette transformation est nécessaire, mais pas suffisante. Il faut aussi se servir normalement de la stylesheet.

    Par exemple, dire de copier tel que le HTML contenu dans la balise <content> :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="content">
      <xsl:copy-of select="node()"/>
    </xsl:template>

    Citation Envoyé par PouetteMan Voir le message
    J'ai aussi essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <root>
        <content>
    	<![CDATA[<p>Bonjour je <u>suis</u> en <strong>gras</strong> !</p>]]>
        </content>
    </root>
    C'est la même chose que ce que tu avais au début, c'est normal que ça ne fasse pas de différence.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Débutant en XSLT
    Inscrit en
    Avril 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Débutant en XSLT

    Informations forums :
    Inscription : Avril 2011
    Messages : 54
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Par exemple, dire de copier tel que le HTML contenu dans la balise <content> :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="content">
      <xsl:copy-of select="node()"/>
    </xsl:template>
    J'ai tenté de faire un copy-of de mon noeud mais sans résultat.

    Dans mon cas, ni Firefox, ni chrome ne sont capable d’interpréter le html issu du copy-of.

    Aujourd'hui, je n'arrive qu'à faire interpréter mon html que sur chrome et qu'avec un xsl:value-of et un disable-output-escaping="yes"...

    Demain, je ferais un essai simplifié et je mettrais en scène chaque cas.
    Je le mettrais en ligne et le posterais ici afin de voir si le soucis est propre à ma config ou non.


    Merci encore pour ton support.

  7. #7
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    Quelle version as-tu des navigateurs ?
    Car de mon coté, pour :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" ?>
    <?xml-stylesheet type="text/xsl" href="style.xslt"?>
    <root>
        <content>
    		<p>Bonjour je <u>suis</u> en <strong>gras</strong> !</p>
    		&lt;p&gt;Bonjour je &lt;u&gt;suis&lt;/u&gt; en &lt;strong&gt;gras&lt;/strong&gt; !&lt;/p&gt;
        </content>
    </root>

    Transformé par :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" 
    	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    	xmlns="http://www.w3.org/1999/xhtml">
    	<xsl:output method="html" encoding="utf-8" indent="yes" />
    	<xsl:template match="/root">
    		<html>
    			<head>
    				<title></title>
    			</head>
    			<body>
    				<xsl:apply-templates/>
    			</body>
    		</html>
    	</xsl:template>
     
    	<xsl:template match="content">
    		<xsl:copy-of select="node()" />
    	</xsl:template>
     
    </xsl:stylesheet>
    Donne comme résultat :
    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
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title></title>
    </head>
    <body>
    <p>
    Bonjour je
    <u>suis</u>
    en
    <strong>gras</strong>
    !
    </p>
    &lt;p&gt;Bonjour je &lt;u&gt;suis&lt;/u&gt; en &lt;strong&gt;gras&lt;/strong&gt; !&lt;/p&gt;
    </body>
    </html>
    Et s'affiche parfaitement comme attendu dans Opéra, Chrome (avec l'option --allow-file-access-from-files), Firefox, IE...

    Je n'arrive pas à reproduire ton problème.
    "Si vous voulez être l’esclave des banques et payer pour financer votre propre esclavage, alors laissez les banquiers créer la monnaie" - Josiah Stamp, 1920, Gouverneur de la Banque d’Angleterre
    "Qui ne peut acheter ruine qui voudrait vendre" - Jacques Duboin.
    "Nous n'héritons pas la terre de nos parents, nous l'empruntons à nos enfants." - Antoine de Saint Exupéry

Discussions similaires

  1. Debutant: html contenu dans array()
    Par Zoomer dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 23/04/2010, 18h35
  2. Réponses: 4
    Dernier message: 08/12/2009, 16h24
  3. Cracher de l'html contenu dans un attribut
    Par tiboudchou dans le forum Struts 2
    Réponses: 1
    Dernier message: 15/11/2008, 21h58
  4. Récupérer le code d'une page html contenue dans un balise object sous I
    Par olivier21c dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/05/2008, 16h48
  5. [Firefox] Dechargement d'un applet contenu dans une IFRAME
    Par magnus2005 dans le forum Applets
    Réponses: 0
    Dernier message: 05/12/2007, 11h27

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