set selected-Attribut von html option element innerhalb wählen Sie basierend auf der äußeren for-each-index

Der Titel klingt viel komplexer als das problem wirklich ist: ich habe versucht, die Dinge zusammenzufügen, die von bits und Stücke gefunden auf stackoverflow und anderswo, aber ich kann nicht ganz herausfinden.

Aufgabe: ich habe eine Liste von Sachen, die ich will zu Durchlaufen und in jeder iteration, ich möchte ein drop-down-Liste und dann standardmäßig wählen Sie das Element basierend auf dem aktuellen Gesamt-index.

Beispiel wird es sehr deutlich.
Hier die XML:

<?xml version="1.0" encoding="UTF-8"?>
<Plants>
   <Plant PlantId="13" PlantType="Tree"/>
   <Plant PlantId="25" PlantType="Flower"/>
   <Plant PlantId="70" PlantType="Shrub"/>
</Plants>

Dann habe ich einige XSL:

<?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" indent="yes" encoding="UTF-8" omit-xml-declaration="yes"/>
    <xsl:template match="/">
        <xsl:param name="listIdx" select="0">
        </xsl:param>
        <table>
            <thead>
                    <tr>
                        <td>PlantType</td>
                    </tr>
            </thead>
            <tbody>
                <xsl:for-each select="Plants/Plant">
                    <tr>
                        <td>
                            <select>
                                <xsl:for-each select="/Plants/Plant">
                                    <xsl:element name="option">
                                        <xsl:attribute name="value">
                                            <xsl:value-of select="@PlantId"/>
                                        </xsl:attribute>
                                        <xsl:if test="count(.) = 2">
                                            <xsl:attribute name="selected">selected</xsl:attribute>    
                                        </xsl:if>
                                        <xsl:value-of select="@PlantType"/>
                                    </xsl:element>
                                </xsl:for-each>
                            </select>
                        </td>
                    </tr>
                </xsl:for-each>
            </tbody>
        </table>        
    </xsl:template>
</xsl:stylesheet>

Was ich bekomme ist diese:

PlantType

Baum [=dropdown-Liste mit Baum, Blume, Strauch]

Baum [=dropdown-Liste mit Baum, Blume, Strauch]

Baum [=dropdown-Liste mit Baum, Blume, Strauch]

Was ich lieben würde, zu haben ist:

PlantType

Baum [=dropdown-Liste mit Baum, Blume, Strauch (idx 1 voreingestellt)]

Blume [=dropdown-Liste mit Baum, Blume, Strauch - (idx-2 vorgewählt)]

Strauch [=dropdown-Liste mit Baum, Blume, Strauch (idx 3 vorwahlzeiten)]

Ich denke, es gibt zwei Ansätze: 1) verwenden Sie ein listIdx in der äußeren Schleife (match) und dann vergleichen Sie den aktuellen index in der inneren Schleife mit listIdx. 2) vergleichen Sie inneren Liste-index mit äußeren Liste index on-the-fly. Wenn es leicht genug, um zu veranschaulichen die wichtigsten Komponenten, würde ich das sehr zu schätzen! Danke!

  • Ihre zur Verfügung gestellten aktuellen und wollten Ausgänge können nicht produziert werden, sofern die transformation. Bitte Bearbeiten Sie die Frage, und korrigieren Sie diesen Widerspruch. Insbesondere die genaue wollte, ergeben sich aus der transformation-nicht eine verbale Beschreibung, und nicht, wie ein browser anzuzeigen. Auch, feststellen, dass in <xsl:if test="count(.) = 2"> der test-Bedingung ist immer false(), weil die Anzahl der einem einzelnen Knoten (.) ist immer 1.
InformationsquelleAutor Wolfgang | 2012-12-10
Schreibe einen Kommentar