Xslt comment style conditionnel pair/impair de lignes
J'ai un tableau html écrite à l'aide de la transformation xslt qui ressemble à ce
<table>
<xsl:for-each select="someNode">
<xsl:if test="testThis">
<tr>
<!-- <xsl:call-template name="conditionalRowStyle"/> -->
<td>something</td>
</tr>
</xsl:if>
<tr>
<!-- <xsl:call-template name="conditionalRowStyle"/> -->
<td>this is always displayed</td>
</tr>
<xsl:if test="testThis2">
<tr>
<!-- <xsl:call-template name="conditionalRowStyle"/> -->
<td>something 2</td>
</tr>
</xsl:if>
....
</xsl:for-each>
<tr>
<!-- <xsl:call-template name="conditionalRowStyle"/> -->
<td>this is always displayed</td>
</tr>
</table>
J'ai besoin d'un moyen pour appliquer les différentes classes oddRow/evenRow tr elems.
<tr class="evenRow"> or <tr class="oddRow">
J'ai essayé d'utiliser un modèle comme celui-ci après chaque <tr> elem
<xsl:template name="conditionalRowStyle">
<xsl:attribute name="class">
<xsl:choose>
<xsl:when test="(count(../preceding-sibling::tr) mod 2) = 0">oddrow</xsl:when>
<xsl:otherwise>evenrow</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</xsl:template>
mais ce n'est pas de travail.
une idée?
Excellente question (+1). Voir ma réponse pour une passe de XSLT 1.0 solution 🙂
OriginalL'auteur mickthompson | 2010-07-15
Vous devez vous connecter pour publier un commentaire.
Vous pourriez probablement vous en sortir avec cette dans juste css
Si vous ne pouvez pas, vous pourriez faire quelque chose comme
Remarque que j'ai écrit ce dans la zone de texte et ne l'ai pas testé.
Merci pour votre reee. Vos solutions ne fonctionnent pas. Je ne peux pas utiliser des propriétés css comme dans d'autres tables, j'ai besoin d'imprimer par programmation 2+ lignes de la même couleur. test="(position() mod 2) != 1 des pauses lorsque je utiliser si les déclarations de l'affichage conditionnel des lignes
OriginalL'auteur Kris
Cette transformation:
lorsqu'il est appliqué sur ce document XML:
produit le résultat voulu:
Ne remarque:
Nous en utilisant la plus fine de la traversée et de la transformation d'un document XML -- nœud par nœud. Après la transformation de l'identité, c'est le deuxième plus important XSLT motif de conception.
Le reste des petits trucs ne sont pas important.
Oui, nous devons nous rappeler que, parfois,
<xsl:apply-templates/>
est trop grossier.le choix de l'étrange, même login est génial.
Vous êtes les bienvenus. Oui, XPath et XSLT sont puissant et élégant.
ce qui se passe quand '1 div ($pCount mod 2 = 0)' ? est-il traduire "1 div 0' , '1 div 1" ou à une autre forme?
OriginalL'auteur Dimitre Novatchev
Il ressemble à la
conditionalRowStyle
modèle à ajouter des styles à la table est dans la même feuille de style comme l'un des bâtiments de la table. Si c'est le cas, alors il ne fonctionnera pas comme prévu, étant donné que les nœuds sélectionnés dans leconditionalRowStyle
modèle sera à partir du document source (contenantsomeNode
) et non pas le document cible (où la table des éléments.)Vous pouvez "hack" ce par la collecte de la table de sortie de la
someNode
des modèles à une variable, d'abord, que vous pouvez ensuite exécuter leconditionalRowStyle
modèle sur la première avant de finalement sortie de la valeur de la variable comme le résultat de la feuille de style. Mais c'est beaucoup plus simple à utiliser deux feuilles de style, que vous exécutez l'un après l'autre dans un pipeline. La première feuille de style convertit lesomeNode
de données à une table, et le second s'appliqueconditionalRowStyle
mise en forme de la table.OriginalL'auteur mdma