XSLT - boucle, le nombre, la position() avec des variables

Excuses à l'avance pour un total novice ici et en difficulté après la lecture de presque tous les XSLT thread ici. Donc, j'ai désespérément besoin de plusieurs cachets d'aspirine et de vos conseils!!

J'ai trois paramètres entrants/les variables qui doivent être traitées à l'aide de xslt version 1.0.

<!-- Variables in the XSL -->
<xsl:variable name="tw">125</xsl:variable>
<xsl:variable name="rows">4</xsl:variable>
<xsl:variable name="cols">6</xsl:variable>

Je veux finir avec la valeurs calculées (en pixels) dans lede fond-positions " du HTML comme ci-dessous:-

<div style="background-position:-0px -0px;"><img src="images/thumbs/1.jpg" alt="one" /></div>
<div style="background-position:-125px -0px;"><img src="images/thumbs/2.jpg" alt="two" /></div>
<div style="background-position:-250px -0px;"><img src="images/thumbs/3.jpg" alt="three" /></div>
<div style="background-position:-375px -0px;"><img src="images/thumbs/4.jpg" alt="four" /></div>
<div style="background-position:-500px -0px;"><img src="images/thumbs/5.jpg" alt="five" /></div>
<div style="background-position:-625px -0px;"><img src="images/thumbs/6.jpg" alt="six" /></div>
<div style="background-position:-0px -125px;"><img src="images/thumbs/7.jpg" alt="seven" /></div>
<div style="background-position:-125px -125px;"><img src="images/thumbs/8.jpg" alt="eight" /></div>
<div style="background-position:-250px -125px;"><img src="images/thumbs/9.jpg" alt="nine" /></div>
<div style="background-position:-375px -125px;"><img src="images/thumbs/10.jpg" alt="ten" /></div>
<div style="background-position:-500px -125px;"><img src="images/thumbs/11.jpg" alt="11" /></div>
<div style="background-position:-625px -125px;"><img src="MIB/images/thumbs/12.jpg" alt="12" /></div>
<div style="background-position:-0px -250px;"><img src="images/thumbs/13.jpg" alt="13" /></div>
<div style="background-position:-125px -250px;"><img src="/mages/thumbs/14.jpg" alt="14" /></div>
<div style="background-position:-250px -250px;"><img src="images/thumbs/15.jpg" alt="15" /></div>
<div style="background-position:-375px -250px;"><img src="images/thumbs/16.jpg" alt="16" /></div>
<div style="background-position:-500px -250px;"><img src="images/thumbs/17.jpg" alt="17" /></div>
<div style="background-position:-625px -250px;"><img src="images/thumbs/18.jpg" alt="18" /></div>
<div style="background-position:-0px -375px;"><img src="images/thumbs/19.jpg" alt="19" /></div>
<div style="background-position:-125px -375px;"><img src="images/thumbs/20.jpg" alt="20" /></div>
<div style="background-position:-250px -375px;"><img src="images/thumbs/21.jpg" alt="21" /></div>
<div style="background-position:-375px -375px;"><img src="images/thumbs/22.jpg" alt="22" /></div>
<div style="background-position:-500px -375px;"><img src="images/thumbs/23.jpg" alt="23" /></div>
<div style="background-position:-625px -375px;"><img src="images/thumbs/24.jpg" alt="24" /></div>

Je me rends compte que j'ai besoin de boucle (en quelque sorte) et de tenir un compte (en quelque sorte) et ayant vu de nombreuses boucle de comptage et des exemples que j'ai attendu le processus d'être franc mais ensuite j'ai lu sur position() et number et bien d'autres choses que ma tête tourne. Je n'ai aucune idée de comment ou où la position de la boucle de comptage dans un for-each déclaration, ou même si un for-each est la meilleure solution. Aucun de mes faibles tentatives produit bien formé XSL de sorte que vous pouvez le voir, je suis pas rapide.

Donc ici en espérant un des gourous ici peut m'aider à démarrer le processus et de les aider dans ma compréhension de xslt.

Les données de l'image est à venir à partir d'un fichier XML et je suis en mesure de traiter les img src et alt sans problème donc, c'est juste le pixel calculs, boucles de comptage, etc ... qui est le problème

<xsl:for-each select="DATASET/ITEM">
<div style="background-position:-{rowpos}px -{colpos}px;"><img src="{thumbnailimage}" alt="{imagealttext}" /></div>
</xsl:for-each>
<!-- rowpos and colpos are the calculated values that are generated from whatever loop and count process is used -->

Donc pour la clarification:

Calcul. Il y a 3 variables qui serait de produire des 6 valeurs calculées. tw=125. La largeur est utilisé pour le fond des positions en fonction de la ligne/colonne, les valeurs calculées sont comme illustré dans l'exemple - par exemple tw-tw tw tw*2, tw*3, tw*4 et tw*5 (sur un total de 6 calculs). Le nombre de lignes et nombre de colonnes détermine comment et où chaque vignette est positionné à l'aide de l'calculé les valeurs de pixel - qui, dans le cas ci-dessus sont à 0px, -125px, -250px, -375px, -500px et -675px.

La poursuite de l'expansion des calculs:- de Ligne et de Colonne positions sont déterminées par la largeur d'une image miniature. La position de chaque vignette est déterminé par le nombre de lignes et nombre de colonnes. Un 3 ligne 3 de la colonne de la grille avec 150px de large pouces exigera 9 vignettes donc 9 jeux de px valeurs, mais seulement 2 unique calculs seraient requis, par exemple tw*2 et tw*3 comme indiqué ci-dessous:-

<div style="background-position: -0px -0px;" /><img src="image 1.jpg" alt="Alt text 1" /></div>
<div style="background-position: -125px -0px;" /><img src="image 2.jpg" alt="Alt text 2" /></div>
<div style="background-position: -250px -0px;" /><img src="image 3.jpg" alt="Alt text 3" /></div>
<div style="background-position: -375px -0px;" /><img src="image 4.jpg" alt="Alt text 4" /></div>
<div style="background-position: -500px -0px;" /><img src="image 5.jpg" alt="Alt text 5" /></div>
<div style="background-position: -0px -125px;" /><img src="image 6.jpg" alt="Alt text 6" /></div>
<div style="background-position: -125px -125px;" /><img src="image 7.jpg" alt="Alt text 7" /></div>
<div style="background-position: -250px -125px;" /><img src="image 8.jpg" alt="Alt text 8" /></div>
<div style="background-position: -375px -125px;" /><img src="image 9.jpg" alt="Alt text 9" /></div>
<div style="background-position: -500px -125px;" /><img src="image 10.jpg" alt="Alt text 10" /></div>
<div style="background-position: -0px -250px;" /><img src="image 11.jpg" alt="Alt text 11" /></div>
<div style="background-position: -125px -250px;" /><img src="image 12.jpg" alt="Alt text 12" /></div>
<div style="background-position: -250px -250px;" /><img src="image 13.jpg" alt="Alt text 13" /></div>
<div style="background-position: -375px -250px;" /><img src="image 14.jpg" alt="Alt text 14" /></div>
<div style="background-position: -500px -250px;" /><img src="image 15.jpg" alt="Alt text 15" /></div>
<div style="background-position: -0px -375px;" /><img src="image 16.jpg" alt="Alt text 16" /></div>
<div style="background-position: -125px -375px;" /><img src="image 17.jpg" alt="Alt text 17" /></div>
<div style="background-position: -250px -375px;" /><img src="image 18.jpg" alt="Alt text 18" /></div>
<div style="background-position: -375px -375px;" /><img src="image 19.jpg" alt="Alt text 19" /></div>
<div style="background-position: -500px -375px;" /><img src="image 20.jpg" alt="Alt text 20" /></div>

Fichier XML L'image src et alt texte est à partir d'un fichier XML:-

<DATASET>
<ITEM>
<THUMBNAILIMAGE>image1.jpg</THUMBNAILIMAGE>
<IMAGEALTTEXT>Alt text 1</IMAGEALTTEXT>
</ITEM>
<ITEM>
<THUMBNAILIMAGE>image2.jpg</THUMBNAILIMAGE>
<IMAGEALTTEXT>Alt text 2</IMAGEALTTEXT>
</ITEM>
......
<ITEM>
<THUMBNAILIMAGE>image20.jpg</THUMBNAILIMAGE>
<IMAGEALTTEXT>Alt text 20</IMAGEALTTEXT>
</ITEM>
</DATASET>
Alors, quelle est la question? Je ne vois pas. Aussi, où est la source du document XML (aussi petit que possible, s'il vous plaît)? Quelle est la signification des variables avec les cris des noms (btw, leurs valeurs sont tous mis dans les pas de la meilleure façon)? Enfin, quelles sont les exigences pour la transformation? S'il vous plaît, de modifier la question et de fournir ces informations manquantes importantes -- pour lui donner du sens.
J'avais espéré te répondre...mais pas de cette façon :(. Je pensais que la question était claire - comment puis-je réaliser les calculs par l'intermédiaire d'un processus en boucle et à écrire le code html dans l'exemple illustré. Que dois-je besoin de fournir. Il n'existe pas de fichier XML en tant que tel. Le XSLT sera passé trois paramètres - tw, cols, des lignes. Désolé, je ne comprends pas les exigences de transformation question. Tout ce que je veux faire est de placer correctement calculé les valeurs des pixels de ROWPOS et COLPOS en utilisant correctement écrit xslt.
Calculer ce? les règles pour le calcul? Comment les valeurs pour les positions seront-ils générés? À l'aide de ce les règles? Comment pouvez-vous dire que "Il n'existe pas de fichier XML en tant que telle" lors de votre code contient l'expression XPath DATASET/ITEM ??? Pourquoi les gens doivent se poser ces questions ou à deviner? Toute cette information importante doit être dans la question, ou bien la question n'est pas significatif.
PBB: ROWPOS et COLPOS sont des noms (dans la voie écrite) doit appartenir dans le document XML source -- certes cela ajoute à la confusion.
PBB: Donner à tous cette information nécessaire est une bonne première étape. Maintenant, pour en faire une bonne question, pourriez-vous, s'il vous plaît, de modifier et de mettre toutes les informations à partir de vos commentaires dans le texte de la question elle-même? Vous pouvez en plus de lire Jon Skeet blog sur comment écrire une bonne question, je pense, un lien à ce qui peut être trouvé dans la Faq de la SORTE. La plus importante chose à apprendre est de savoir comment poser une bonne question. Plusieurs fois, juste en suivant les directives pour la définition d'une question dans le bon sens, aide à la personne pour mieux comprendre le problème et de trouver une solution.

OriginalL'auteur PBB | 2012-06-02