XSLT: rekursion möglich?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Natas12
Beiträge: 1751
Registriert: 12.04.2002 20:59:12

XSLT: rekursion möglich?

Beitrag von Natas12 » 02.06.2004 15:10:42

hallo liebe xml-experten - so es euch hier gibt! ;-)

folgendes problem - gegeben ist folgende XML-struktur

Code: Alles auswählen

<section>
<frage>Fragetext</frage>
</section>
hintergrund: es soll ein fragebogen im XML-format erstellt werden. jener soll beliebig "tief" verschachtelbar sein. beispiel: teil - abschnitt - sektion - gruppe - etc. um jedoch nicht selbst eine struktur vorzugeben (indem wir bereits tags definieren, die die o.g. namen enthalten), haben wir uns entschlossen, dass das element "section" beliebig viele weitere <section> - elemente enthalten darf. wer also einen fragebogen mit 10 ebenen machen möchte, der kann das tun.

Code: Alles auswählen

das hier wollen wir NICHT:
<teil>
<sektion>
<abschnitt>
<gruppe>
<frage>Blabla</frage>
<frage>Blabla</frage>
<frage>Blabla</frage>
<frage>Blabla</frage>
</gruppe>
<gruppe>
<frage>Blabla</frage>
<frage>Blabla</frage>
<frage>Blabla</frage>
<frage>Blabla</frage>
</gruppe>
</abschnitt>
<abschnitt>
<gruppe>
<frage>Blabla</frage>
<frage>Blabla</frage>
<frage>Blabla</frage>
<frage>Blabla</frage>
</gruppe>
</abschnitt>
</sektion>
</teil>

etc.

sondern:
<section>
<frage>blabla</frage>
</section>

wobei das tag <section> eben beliebig viele <section>-elemente enthalten darf. damit ließe sich eine beliebige schachtelungstiefe erzielen.

nun soll der fragebogen per stylesheet in HTML ausgegeben werden.
das prinzip ist eigentlich einfach, bloß wissen wir nicht, ob es möglich ist, dass ein template sich selbst rekursiv aufruft (bis es alle o.g. section-elemente durchlaufen hat).

äääh - versteht jemand mein problem? mich würde einfach nur interessieren, ob das PRINZIPIELL mit XSLT möglich ist.

gruß

natas12
"In den reichen Ländern hat die Freiheit gesiegt - mit all den schrecklichen Folgen, die das für die anderen mit sich bringt und noch bringen wird. Die Demokratie ist auf andere Epochen verschoben." (L. Canfora)

vkroll
Beiträge: 5
Registriert: 19.10.2005 17:21:58

Beitrag von vkroll » 19.10.2005 18:01:12

hmmmm

sehe ich das richtig, daß jedes <section> Element behandelt werden soll?

warum nicht:

Code: Alles auswählen

<xsl:template match="section">
 <!-- do it baby -->
</xsl:template>


Benutzeravatar
Natas12
Beiträge: 1751
Registriert: 12.04.2002 20:59:12

Beitrag von Natas12 » 19.10.2005 21:41:31

ola, mein thread wurde nochmal ausgegraben. das problem wurde bereits gelöst (allerdings nicht von mir). worum es damals ging: es sollte ein xslt-template geschaffen werden, das sich selbst aufruft. einfach nur alle sections zu durchlaufen ging nicht, da in abhängigkeit des kontextes des jeweiligen section-elements etwas anderes in den ausgabestrom geschrieben werden sollte. also: wenn das aktuelle section-element kind eines section-elementes ist, das wiederum kind des obersten section-elementes ist, dann mache XY, ansonsten Z, usw, bis alle section-elemente durchlaufen wurden. leider hab ich mit diesem teil nicht mehr viel zu tun (die meiste zeit habe ich nur an der sprachdefinition und nicht am stylesheet gearbeitet). dafür haben wir eine wesentlich versierte kollegin, die in ihrer freizeit rekursive xslt-templates schreibt und xpath-ausdrücke auswending lernt... ;-)
"In den reichen Ländern hat die Freiheit gesiegt - mit all den schrecklichen Folgen, die das für die anderen mit sich bringt und noch bringen wird. Die Demokratie ist auf andere Epochen verschoben." (L. Canfora)

Antworten