Geschwisterelemte mittels XSLT neu hierarchisieren

Hallo,

ich bin gerade dabei, ein XSLT-Stylesheet zu entwerfen, welches XML-Instanzen meiner eigenen DTD in DITA-konforme Dokumente konvertieren soll. Bei der Umsetzung von Handlungsanweisungen einer Anleitung bin ich auf ein Problem gestoßen. Nach meiner DTD werden diese so verfasst (natürlich haben die Elemente normalerweise Inhalt):

Mehrere Handlungsschritte stehen hintereinander und werden gelegentlich durch Resultate ergänzt. DITA bietet nun die Möglichkeit, Zwischenresultate mit demn Element stepresult gesondert auszuzeichnen. Obiges Beispiel sähe also folgendermaßen aus:

Das Problem besteht darin, dass stepresult ein Unterelement von step ist. In meiner DTD sind Zwischenresultate allerdings Geschwisterelemente von step. Wie setze ich das in XSLT um?

In meinem Template für result treffe ich bereits die Unterscheidung zwischen Resultat und Zwischenresultat:

Im Template für step muss ich nun ja irgendwie an das Resultat rankommen. Erst mal frage ich also ab, ob nach dem Step ein Resultat vorkommt.

Und nun? Ein bewirkt ja, dass alle Zwischenresultate in das Element step geschrieben werden. Mit Komme ich zwar an das gewünschte Resultat, allerdings wird dabei ja nur der reine Text übergeben. Wie soll ich vorgehen?

Vielen Dank im Voraus

Hallo Hendrik,

Falls result sebler eine template braucht halt ein einbauen.

Hoffe, das ist das was du suchst. Zum Testen hatte ich keien Zeit …

mfg

Dirk.Pegasus

Hallo Dirk,

vielen Dank für deinen Lösungsvorschlag. Leider berücksichtigt er nicht, dass stepresult innerhalb von step vorkommen soll:

soll zu

werden

Wenn ich mich nicht täusche, gibt dein Vorschlag step und stepresult nacheinander aus. Gerade diese Schachtelung, die im Ursprungsdokument nicht vorkommt, ist mein Problem.

Hendrik

Hallo Hendrik,

stimmt, hatte ich übersehen:

<?xml version="1.0" encoding="iso-8859-1"?>

Das dürtfe aber nur dann klappen, wenn es exakt ein result je step gibt.

Auch problematisch:
kein Step vor result
Am Ende wird es kein reult geben, sofern davor ein step war.

mfg

Dirk

Ähnliches hatte ich auch schon ausprobiert, bin dabei aber auf mehrere Probleme gestoßen. Das deines Beispiels müsste erst mal zu werden, weil ich ja den Wert von „result“ und nicht von „step“ haben möchte. Das funktioniert sogar, allerdings hat „result“ weitere Unterelemente. Ein bewirkt an dieser Stelle aber, dass innerhalb des betreffenden steps alle nachfolgenden Resultate innerhalb des steps ausgegeben werden.

Kannst du Beispiel geben? (vorehr, nachher)? owT
s.o.