XSL: Kinder auswerten und den Eltern ein Ergebnis zurückgeben

stephanfeltel

Grünschnabel
Mahlzeit.
ich hab folgendes Problem:
Ich möchte aus einer XML-Datei eine html-Datei bauen. soweit noch kein Thema.

die XML sieht wie folgt aus:

Code:
<child active="false">
  <name>Vater1</name>
  <status>2</status>
  <child active="true">
    <name>Kind1</name>
    <status>1</status>
    <child active="false">
      <name>Enkel1</name>
      <status>0</status>
    </child>
    <child active="false">
      <name>Enkel2</name>
      <status>0</status>
    </child>
  </child>
</child>

jetzt möchte ich gern beim erzeugen meiner HTML-Datei alle "Stati" auswerten und zum Ende einen sog. Gesamtstaus zurückgeben.

Also genauer. Jedes Kind hat einen eigenen Status, diesen soll der jeweilige Vater auslesen und zusammen mit seinem eigenen Staus zu einen gesammten verbinden.
Dieser Status wäre dann z.b. 1 wenn alle Childs einen Status von 1 haben und der Vater ebenfalls. Das ganze müsste also rekursiv nach oben gegeben werden und beim jeweiligen Vater einen Wert setzen.

Für ein Kind sieht die Transformation wie folgt aus:

Code:
<xsl:for-each select="child">
  <br />
  <table border="1" width="100%">
    <tbody>
      <tr>
        <td width="10"><br />
          <span style="vertical-align:top; ">-</span>
        </td>
        <td>
          <br />Symbol:<xsl:value-of select="if (   status eq  &quot;0&quot; ) then &quot; nichts ausgefüllt&quot; else  if (  status  eq  &quot;1&quot; ) then &quot; nicht vollständig ausgefüllt&quot; else &quot; voll&quot;" /> 
          <br />Test auf alle Unterknoten: <br />
            <xsl:for-each select="validierungsstatus">
              <xsl:apply-templates />
            </xsl:for-each>
...

so das klappt also schon super wenn ich nur das jeweilige Child auswerte.
In der HTML- seite steht dann z.B. "nichts ausgefüllt" wenn der Status 0 ist.

Mein Problem ist nun wie ich das dann rekursiv für jedes Child mache?

Habt ihr meine Ausführungen soweit verstanden und gibt es gegef. Lösungsvorschläge.
Ich wäre euch sehr dankbar.
besten Dank schon einmal im Vorraus
 
Ich würde als erstes die Child-Procedure in ein eigenes template auslagern und dann innerhalb des templates wieder mit <xsl:apply templates select="child"/> die childs drunter aufrufen. (Is nur ne Idee und nich validiert)
 

Neue Beiträge

Zurück