Dynamische Formularlemente: schwer!
Mario Müller
- xsl
Werte Teilnehmer:
Ich möchte via XSL aus einer XML-Datei dynamisch Radiobuttons generieren.
Radiobuttons sind über das value-Attribut miteinander verknüpft.
Beispiel:
<input type="radio" name="Zahlmethode" value="Mastercard"/>
Ich möchte aber nicht "Mastercard" fest vorgeben, sondern mit einer Variabeln versehen.
Allerdings funktioniert das nicht (Syntaxfehler):
<input type="radio" name="Zahlmethode" value="<xsl:value-of select="position()"/>"/>
Anbei die XML-Datei sowie die XSL. Vielen Dank
**************************XML Datei ***************************
<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type="text/xsl" href="E:\XML und XSL\tutorial\fragekatalog.xsl"?>
<fragekatalog>
<frage name="Apfel" typ="obst">
<menge anzahl="8" einheit="radiobutton"></menge>
<menge anzahl="9" einheit="radiobutton"></menge>
<bemerkung>Äpfel sind besonders gesund</bemerkung>
</frage>
<frage name="Birne" typ="obst">
<menge anzahl="8" einheit="radiobutton"></menge>
<menge anzahl="9" einheit="radiobutton"></menge>
<bemerkung>Birnen sind sehr nahrhaft</bemerkung>
</frage>
<frage name="Pflaume" typ="obst">
<menge anzahl="22"></menge>
</frage>
<frage name="Schnittlauch" typ="gemuese" farbe="gruen">
<menge anzahl="33" einheit="checkbox"></menge>
<bemerkung>Birnen sind sehr nahrhaft</bemerkung>
</frage>
<frage name="Brombeere" typ="obst">
<menge anzahl="35" einheit="checkbox"></menge>
<bemerkung>blähen</bemerkung>
</frage>
<frage name="Radis" typ="gemuese">
<menge anzahl="22"></menge>
<bemerkung>Innen weiß und außen rot</bemerkung>
</frage>
<frage name="Salat" typ="gemuese" farbe="gruen">
<menge anzahl="33"></menge>
<bemerkung>Birnen sind sehr nahrhaft</bemerkung>
</frage>
<frage name="Himbeere" typ="obst">
<menge anzahl="10" einheit="checkbox"></menge>
<bemerkung>Himbeeren sind Waldfrüchte</bemerkung>
</frage>
<frage name="Gurke" typ="gemuese" farbe="gruen">
<menge anzahl="3"></menge>
<bemerkung>Birnen sind sehr nahrhaft</bemerkung>
</frage>
</fragekatalog>
**************************XSL Datei ***************************
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="iso-8859-1"/>
<xsl:template match="seite">
<xsl:apply-templates select="document('fragekatalog.xml')"/>
</xsl:template>
<xsl:template match="fragekatalog">
<html>
<head>
<title>xsl:textDie Gueter</xsl:text></title>
</head>
<body bgcolor="#ffffff">
<h1>xsl:textDie Güter</xsl:text></h1><hr/>
<h2>obst</h2>
<table border="1">
<tr><th>Frage</th><th>Preis</th><th>Menge</th><th>Bemerkung</th></tr>
<xsl:apply-templates select="child::frage[@typ='obst']"/>
</table>
<h2>gemuese</h2>
<table border="1">
<tr><th>Bezeichnung</th><th>Preis</th><th>Menge</th><th>Bemerkung</th></tr>
<xsl:apply-templates select="child::frage[@typ='gemuese']"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="frage">
<tr><td> <xsl:value-of select="@name"/> </td>
<xsl:apply-templates select="preis"/>
<xsl:apply-templates select="menge"/>
<td>
xsl:choose
<xsl:when test="child::bemerkung">
<xsl:apply-templates select="bemerkung"/>
</xsl:when>
xsl:otherwise
keine
</xsl:otherwise>
</xsl:choose>
</td>
</tr>
</xsl:template>
<xsl:template match="menge">
<td>
<!--ANZAHL<xsl:value-of select="@anzahl"/> -->
xsl:choose
<xsl:when test="@einheit='checkbox'">
<xsl:value-of select="@einheit"/>
</xsl:when>
<xsl:when test="@einheit='textarea'">
<xsl:value-of select="@einheit"/>
</xsl:when>
<xsl:when test="@einheit='radiobutton'">
<xsl:value-of select="count(//menge)"/>
<input type="radio" name="Zahlmethode" value="Mastercard"/>
<xsl:value-of select="@einheit"/>
</xsl:when>
<!-- xsl:otherwise
xsl:text </xsl:text>Stück
</xsl:otherwise>-->
</xsl:choose>
xsl:choose
<xsl:when test="@einheit='kg'">
<xsl:value-of select="@einheit"/>
</xsl:when>
<!--xsl:otherwise
xsl:text </xsl:text>Stück
</xsl:otherwise> -->
</xsl:choose>
</td>
</xsl:template>
</xsl:stylesheet>
Allerdings funktioniert das nicht (Syntaxfehler):
<input type="radio" name="Zahlmethode" value="<xsl:value-of select="position()"/>"/>
Gehts so?
<input type="radio" name="Zahlmethode" value="{position()}"/>
Allerdings funktioniert das nicht (Syntaxfehler):
<input type="radio" name="Zahlmethode" value="<xsl:value-of select="position()"/>"/>
Gehts so?
<input type="radio" name="Zahlmethode" value="{position()}"/>
P.S. Wenn nicht, dann gehts damit: xsl:attribute