Rekursion: Ursprüngliche Struktur beibehalten

M

mariomueller

Hallo Zusammen,

folgendes Problem. Ich habe einen Fragekatalog als XML und mächte via XSL
einen HTML-Fragekatalog generieren.
Zu jeder Frage soll der Befragte mittels Radiobuttons beantworten. Allerdings kann
sich aus einer Antwort eine neue
Frage ergeben:

Beispiel:
Frage1 : "Haben Sie schon mit XSLT gearbeitet?"
Antwort zu Frage 1: Radiobutton 1.1 "ja"
neu Frage2: "Sind Sie mit XSLT zufrieden?"
Antwort zu Frage 2: Radiobutton 2.1 "ja"
Antwort zu Frage 2: Radiobutton 2.2 "nein"
Antwort zu Frage 1: Radiobutton 1.2 "nein"

Der Fragekatalog, der als XML vorliegt soll eine einfache Struktur haben und nur
die Elemente "frage" und
"radiobutton" besitzen. Dies macht es natürlich erforderlich, dass ich das XMl
rekursiv verarbeite:

******************************************************************
Echtes Beispiel XML:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="E:\XML und
XSL\Checklisten\fragekatalog_rekursiv.xsl"?>
<fragekatalog>
<frage text="Haben Sie schon mit XSLT gearbeitet ">
<radiobutton>rb ja 1</radiobutton>
<frage text="Sind Sie mit XSLT zufrieden?">
<radiobutton>rb ja 1.1</radiobutton>
<radiobutton>rb nein 1.1</radiobutton>
</frage>
<radiobutton>nein 1</radiobutton>
</frage>
</fragekatalog>
************* zugehoeriges XSL ******************************
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/fragekatalog">
<html>
<head>
<title>Überschrift</title>
</head>
<body>
<xsl:for-each select="frage">
<xsl:call-template
name="tl">
<xsl:with-param
name="lfdnr">

<xsl:value-of select="1"></xsl:value-of>
</xsl:with-
param>
<xsl:with-param
name="text_der_frage">

<xsl:value-of select="@text"></xsl:value-of>
</xsl:with-
param>
</xsl:call-template>
<hr></hr>
</xsl:for-each>
</body>
</html>
</xsl:template>
<xsl:template name="tl">
<xsl:param name="lfdnr"></xsl:param>
<xsl:param name="text_der_frage"></xsl:param>
<xsl:value-of select="$lfdnr"></xsl:value-of>
<xsl:value-of select="$text_der_frage"></xsl:value-of>
<br></br>


<xsl:for-each select="radiobutton">
<br></br>
<input type="radio" witdh="10" name="{$lfdnr}"
value="{$lfdnr}"></input>
<xsl:value-of select="."></xsl:value-of>
</xsl:for-each> <!-- select="radiobutton" -->
<br></br>
<!-- hier beginnt die Rekursion -->
<xsl:for-each select="frage">
<xsl:call-template name="tl">
<xsl:with-param name="lfdnr">
<xsl:value-of
select="$lfdnr+1"></xsl:value-of>
<br></br>
<!-- <xsl:value-of
select="frage"></xsl:value-of> -->
</xsl:with-param>
<xsl:with-param
name="text_der_frage">
<xsl:value-of select="@text
[$lfdnr]"></xsl:value-of>
</xsl:with-param>
</xsl:call-template>
<!-- name="tl" -->
</xsl:for-each>
<!-- select="frage"> -->

</xsl:template>

<xsl:template name="t_radiobutton">
<xsl:param name="lfdnr"/>
<input type="radio" witdh="10" name="{$lfdnr}"
value="{$lfdnr}"></input>
<xsl:value-of select="."/>

</xsl:template>

</xsl:stylesheet>

**********************Problem********************************************************
Die Zugehörigkeit Radiobuttons zu Frage geht verloren.
Hier das generierte HTML

1Haben Sie schon mit XSLT gearbeitet

rb ja 1
nein 1

2Sind Sie mit XSLT zufrieden?

rb ja 1.1
rb nein 1.1

______________________________________________________
Es sollte aber so aussehen:

1Haben Sie schon mit XSLT gearbeitet

rb ja 1

2Sind Sie mit XSLT zufrieden?

rb ja 1.1
rb nein 1.1

nein 1


*************************
Wäre sehr dankbar, wenn jemand eine Lösung anbieten kann.


Gruss Mario
 

Neue Beiträge

Zurück