[XSL] Gros trou blanc

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
arcanis

[XSL] Gros trou blanc

Message par arcanis »

Salut!
J'ai réalisé un document XSL qui est chargé de convertir une carte du monde qui est au format xml. Jusque là, tout va bien: ça s'affiche dans le navigateur correctement sous IE. Sauf que FF m'affiche un joli trou blanc, et je ne sais pas du tout pourquoi (tout est correct...)...
Demo: http://arcanis-sanctuary.com/tmp/test.xml
Fichier XSL: http://arcanis-sanctuary.com/tmp/test.xsl
Images: http://arcanis-sanctuary.com/tmp/Tiles

Si vous savez pourquoi, ça va m'enlever une grosse épine du pied :D

Merci d'avance!
Arcanis

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message par Benoit »

Franchement c'est difficile à dire vu la structure du résultat (il n'y en a pas). Est-ce que tu ne pourrais pas utiliser un tableau avec des lignes et des colonnes par exemple ? Là on pourrait identifier tout de suite la case qui pose problème.

Autre possibilité, faire ta transformation côté serveur, ce serait nettement plus performant et on pourrait manipuler le DOM généré directement avec Firebug.
Invité

Message par Invité »

Aucun problème avec la transformation XSL via le module PHP
La faute vient donc bien de firefox lui-même... :?

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7
arcanis

Message par arcanis »

Je viens de m'aperçevoir d'un truc:
Firefox n'inclue pas le premier bloc <case> qu'il rencontre dans le xsl:for-each :/
Est-ce qu'il y a une erreur dans ma syntaxe (fichier xsl: http://www.arcanis-sanctuary.com/tmp/test.xsl)?

Merci d'avance!

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message par Benoit »

Je ne vois pas d'erreur à première vue, mais par contre le if(1) me parait superflu.

Bon, sinon une bête idée : si tu mets deux fois la première case, il se passe quoi ?
arcanis

Message par arcanis »

Dans ce cas-là, ça marche. Mais si je la vide de son contenu (balise <tile>), elle n'est pas reconnue, et c'est la seconde qui saute (donc c'est le même résultat)...je pense qu'il faudrait mettre ce bug quelque part, mais je ne vois pas où.
J'avais rajouté le if(1) parce que je doit ensuite effectuer une condition en fonction de la position. C'est juste pour que j'ai juste à changer le squelette du xsl par la suite.
Bon, je vais devoir rajouter une balise...pas grave, ça prendra juste de traitement en plus à Python ^^.

(juste avant de poster ce message, je viens de m'aperçevoir que firefox lit la première balise dans certains cas...là, j'ai juste rajouté une ligne "<case><tile /></case>", mais il me génère une erreur css (normal, puisque j'applique le style "z-index: ; top: ; left: ;" sans donner de valeurs...mais pourquoi lit-il cette balise dans certains cas uniquement?)

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7
arcanis

Message par arcanis »

Vous connaissez l'expression "j'y pige que dale"?
Et bien voilà mon état d'esprit actuel...
L'erreur (si c'en est une) se trouve à la ligne

Code : Tout sélectionner

<xsl:output method="html" encoding="ISO-8859-1" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="DTD/xhtml1-strict.dtd" />
Qu'il faut remplacer par

Code : Tout sélectionner

<xsl:output method="html" encoding="ISO-8859-1" />
Bref, maintenant ça marche. Mais si vous savez pourquoi ça ne fonctionnait pas, et si vous aviez le temps de me l'expliquer, ça m'aiderait pas mal à comprendre mon erreur.
Merci de m'avoir aidé, en tout cas!

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7
FF_Olivier
Iguane
Messages : 979
Inscription : 09 juil. 2004, 15:41

Message par FF_Olivier »

Ce code-ci fonctionne chez moi :

Code : Tout sélectionner

<?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"
                doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
                doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
                indent="yes"/>
	<xsl:template match="/">
        <html>
          <head>
            <title>Essai</title>
          </head>
          <body>
            <xsl:for-each select="map/case">
              <xsl:variable name="x" select="@x" />
              <xsl:variable name="y" select="@y" />
              <xsl:for-each select="tile">
                <xsl:if test="1">
                  <xsl:element name="img">
                    <xsl:attribute name="style">z-index: <xsl:value-of select="@niveau" />; position: absolute; top: <xsl:value-of select="$y*45" />px; left: <xsl:value-of select="$x*45" />px;</xsl:attribute>
                    <xsl:attribute name="src">./Tiles/<xsl:value-of select="@valeur" />.png</xsl:attribute>
                    <xsl:attribute name="alt"></xsl:attribute>
                    <xsl:attribute name="width">45</xsl:attribute>
                    <xsl:attribute name="height">45</xsl:attribute>
                  </xsl:element>
                </xsl:if>
              </xsl:for-each>
            </xsl:for-each>
          </body>
        </html>
	</xsl:template>
</xsl:stylesheet>
Si tu fais une sortie html, il faut commencer le template par l'élément <html>.
Il faudra sans doute remettre les différents encoding à leurs valeurs de départ, j'avais changé pour voir s'il ne s'agissait pas d'un pb d'encodage ;) ...
( Et pour du strict comme ici, il faut encore ajouter le meta content-type dans le <head>, p-ê une déclaration <?xml>, etc...)

PS : regarde dans l'inspecteur DOM la différence d'output produite par les 2 codes ;) ...
openSUSE 12.2 - FF v24.0 FR - TB v24.0 FR ma config en détails - Décrivez la vôtre ici ;)
userContent.css : modifiez l'apparence et le contenu des sites visités !
arcanis

Message par arcanis »

Ca marche maintenant (charset iso-8859-1)

Merci!

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 4 invités