Page 1 sur 1

[XSL] Gros trou blanc

Publié : 23 sept. 2007, 17:37
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

Publié : 23 sept. 2007, 18:55
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.

Publié : 23 sept. 2007, 19:36
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

Publié : 08 oct. 2007, 20:40
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

Publié : 08 oct. 2007, 22:31
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 ?

Publié : 09 oct. 2007, 19:28
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

Publié : 09 oct. 2007, 22:46
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

Publié : 10 oct. 2007, 12:40
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 ;) ...

Publié : 14 oct. 2007, 18:41
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