Announcement

Collapse
No announcement yet.

Dropdown-Liste mit xsl

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dropdown-Liste mit xsl

    Hallo, ich habe eine XML der Form
    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>
    daraus sollen Dropdown-Listen derart

    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>
    werden.

    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>
    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:
    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>
    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
    Zuletzt editiert von EM91; 19.05.2015, 14:52.
Working...
X