Hallo, ich habe eine XML der Form
daraus sollen Dropdown-Listen derart
werden.
Bisher habe ich (XSL 1.0):
Mir gelingt es nicht, für jede Option den Inhalt des bestimmten Attributes auszulesen. Eine (fast) funktionierende Lösung für das Template featureOptions war:
Das Problem sind jetzt Duplikate, ich möchte ja nur dann ein <option> tag einfügen wenn es diese Auswahl noch nicht gibt. habe versucht mit preceding-sibling zu arbeiten, weis allerdings nicht wie ich das auf Attribute anwende. Oder könnte man hier auch key verwenden? Ich arbeite erst seit kurzem mit XSL und habe ziemlich Probleme mit den Attributen, da ich meist nur Literatur/Internetquellen finde die mit den Knoten arbeiten...
Vielleicht noch ein paar Hinweise: im Original gibt es nicht nur Attribute namens "Wert", sondern auch "ÜbersichtsWert" und "FilterWert". Für die Dropdown-Auswahl sollen nur die FilterWerte beachtet werden, das habe ich in die Variable "aktuellerWert" eingebaut. Die Anzahl aller Werte geht bis etwa 200. Die Zuordnung von "features" und "data" geht über die Reihenfolge, also die erste "row" von "features" liefert die übergeordneten Eigenschaften zum Attribut "Wert1" in "data".
Über Tipps, Hinweise, gute Literatur oder Lösungsvorschläge wäre ich sehr dankbar. Und danke schonmal an jeden, der sich die Mühe gemacht hat das komplett zu lesen =) kürzer ging es leider nicht
Viele Grüße
Code:
<data> <row Wert1="1" Wert2="2" Wert3="3" /> <row Wert1="a" Wert2="b" Wert3="c" /> </data> <features> <row title="Eigenschaft 1" /> <row title="Eigenschaft 2" /> <row title="Eigenschaft 3"> </features>
Code:
<label for="Wert1">Eigenschaft 1</label> <select id="Wert1"> <option>1</option> <option>a</option> </select> <label for="Wert2">Eigenschaft 2</label> <select id="Wert2"> <option>2</option> <option>b</option> </select> <label for="Wert3">Eigenschaft 3</label> <select id="Wert3"> <option>3</option> <option>c</option> </select>
Bisher habe ich (XSL 1.0):
Code:
<xsl:template match="features"> <xsl:for-each select="row"> <label> <xsl:attribute name="for">Wert<xsl:value-of select="position()" /></xsl:attribute> <xsl:value-of select="@title"> </label> <xsl:call-template name="featureOptions"> <xsl:with-param name="featureNr" select="position()" /> </xsl:call-template> </xsl:for-each> </xsl:template> <xsl:template name="featureOptions"> <xsl:param name="featureNr" /> <select> <xsl:attribute name="id">Wert<xsl:value-of select="$featureNr" /></xsl:attribute> <xsl:for-each select="//data/row"> <option>Hier komme ich nicht weiter</option> </xsl:for-each> </select> </xsl:template>
Code:
<xsl:template name="featureOptions"> <xsl:param name="featureNr" /> <xsl:variable name="aktuellerWert"> <xsl:value-of select="concat('Wert', $featureNr)" /> </xsl:variable> <select> <xsl:attribute name="id">Wert<xsl:value-of select="$featureNr" /></xsl:attribute> <xsl:for-each select="//data/row"> <xsl:for-each select="@*"> <xsl:if test="$aktuellerWert = substring(name(), string-length(name()) - string-length($aktuellerWert) + 1)"> <option><xsl:value-of select="." /></option> </xsl:if></xsl:for-each> </xsl:for-each> </select> </xsl:template>
Vielleicht noch ein paar Hinweise: im Original gibt es nicht nur Attribute namens "Wert", sondern auch "ÜbersichtsWert" und "FilterWert". Für die Dropdown-Auswahl sollen nur die FilterWerte beachtet werden, das habe ich in die Variable "aktuellerWert" eingebaut. Die Anzahl aller Werte geht bis etwa 200. Die Zuordnung von "features" und "data" geht über die Reihenfolge, also die erste "row" von "features" liefert die übergeordneten Eigenschaften zum Attribut "Wert1" in "data".
Über Tipps, Hinweise, gute Literatur oder Lösungsvorschläge wäre ich sehr dankbar. Und danke schonmal an jeden, der sich die Mühe gemacht hat das komplett zu lesen =) kürzer ging es leider nicht
Viele Grüße