8
votes

Attribuer la classe CSS à l'élément dans un XSL

Mon fichier XML est le suivant:

<xsl:template match="row">
        <li class="rowClass ${className}">
            <xsl:choose>
                <xsl:when test="type = 'YESORNO'">
                    <xsl:variable name="className" select="rowTypeBoolean"/>
                </xsl:when>
                <xsl:when test="type = 'OPTIONS'">
                    <xsl:variable name="className" select="rowTypeOptions"/>
                </xsl:when>
                <xsl:when test="type = 'OPERATION'">
                     <xsl:variable name="className" select="rowTypeOperation"/>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:variable name="className" select="rowTypeOther"/>
                </xsl:otherwise>
            </xsl:choose>
            <span class="rowTitleClass">
                <xsl:value-of select="rowtitle"/>
            </span>
            <br/>
            <ul class="subLineListClass">
                <xsl:apply-templates select="subLine"/>
            </ul>
        </li>
</xsl:template>


2 commentaires

Vous avez publié votre XML et votre sortie souhaitée. Pouvez-vous poster le XSL que vous rencontrez actuellement des problèmes?


Bonne question (+1). Consultez ma réponse pour une solution complète simple et évite le codage inutile de la logique de prise de décision.


3 Réponses :


10
votes

Vous devez l'ajouter sous la forme d'un attribut à l'élément:

    <li>
        <xsl:choose>
            <xsl:when test="type = 'YESORNO'">
                <xsl:attribute name="className">rowTypeBoolean</xsl:attribute>
            </xsl:when>
            <xsl:when test="type = 'OPTIONS'">
                <xsl:attribute name="className">rowTypeOptions</xsl:attribute>
            </xsl:when>
            <xsl:when test="type = 'OPERATION'">
                <xsl:attribute name="className">rowTypeOperation"</xsl:attribute>
            </xsl:when>
            <xsl:otherwise>
                <xsl:attribute name="className">rowTypeOther"</xsl:attribute>
            </xsl:otherwise>
        </xsl:choose>
    </li>


0 commentaires

6
votes

La solution la plus naïve serait d'utiliser xsl: choisir code> instructions telles que ceci: xxx pré>

Autre moyen serait d'avoir une carte en ligne (ou via FN: document () code>) Comme: p> xxx pré>

avec ceci comme élément de niveau supérieur p>

<map:map xmlns:map="map">
    <item type="YESORNO">rowTypeBoolean</item>
    <item type="OPTIONS">rowTypeOption</item>
    <item type="OPERATIONS">rowTypeOperation</item>
    <item>rowTypeOther</item>
</map:map>

<xsl:variable name="map" select="document('')/*/map:map/*" xmlns:map="map"/>


0 commentaires

4
votes

il n'est pas nécessaire du tout d'utiliser code> dans la transformation forte>:

Cette transformation: p>

<ol>
    <li class="rowTypeBoolean">
        <rowTitle>RT1</rowTitle>
        <rowType>yesorno</rowType>
        <ul>
            <li>subLine1Content</li>
            <li>subLine2Content</li>
        </ul>
        <subLine>subLine2Content</subLine>
    </li>
    <li class="rowTypeOperation">
        <rowTitle>RT2</rowTitle>
        <rowType>operation</rowType>
        <ul>
            <li>subLine1Content</li>
            <li>subLine2Content</li>
            <li>subLine3Content</li>
        </ul>
        <subLine>subLine2Content</subLine>
        <subLine>subLine3Content</subLine>
    </li>
</ol>


0 commentaires