Home
Über mich
Blog
Veröffentlichungen
IT-Trainings
Impressum


Spaltenweises Programmieren: pro Ort

Spaltenweises Programmieren: pro Ort

Das spaltenweise Programmieren können wir in XSL 2.0 auch dynamisch gestalten, etwa: für jeden Ort eine eigene Spalte, in der die Einwohner aufgelistet werden. Das Ergebnis sollte so aussehen:

pic/Ort_Spalten.jpg

Die XSL-Logik generiert zunächst eine Hilfsvariable, in der notwendige Informationen vordefiniert werden, so daß die Auswertung später umso leichter fällt.

 <xsl:template name="ORT_Spaltendemo">
  <xsl:variable name="vortspalte">
   <xsl:for-each select="//Ort">
    <spalteORT name="{name}" id="{id}">
     <xsl:for-each select="Mensch">
      <m info="{concat(vorname, ' ', name)}" zeile="{position()}" />
     </xsl:for-each>
    </spalteORT>
   </xsl:for-each>
  </xsl:variable>
  <xsl:variable name="vmaxzeilen"
   select="xs:integer(max($vortspalte/spalteORT/m/@zeile))" 
   as="xs:integer" />
  <html>
   <body>
    <table border="1">
     <tr>
      <xsl:for-each select="$vortspalte/spalteORT">
       <th>
        <xsl:value-of select="@name" />
       </th>
      </xsl:for-each>
     </tr>
     <xsl:for-each select="1 to xs:integer($vmaxzeilen)">
      <xsl:variable name="vcur_zeile" select="." />
      <tr>
       <xsl:for-each select="$vortspalte/spalteORT">
        <xsl:variable name="vcur_spalte" select="@id" />
        <td>
         <xsl:value-of
          select="$vortspalte/spalteORT[@id=$vcur_spalte]
                      /m[@zeile=$vcur_zeile]/@info" />
        </td>
       </xsl:for-each>
      </tr>
     </xsl:for-each>
    </table>
   </body>
  </html>
 </xsl:template>

Durch die vorstehende Logik wird im Arbeitsspeicher zunächst eine temporäre Variable "vortspalte" gebildet, die so aufgebaut ist:

   <spalteORT name="Neustadt" id="1">
      <m info="Hugo Holzflos" zeile="1"/>
      <m info="Nicole Nixlos" zeile="2"/>
      <m info="Stefan Sprachlos" zeile="3"/>
      <m info="Stefan Sagblos" zeile="4"/>
      <m info="Siggi Sorglos" zeile="5"/>
      <m info="Heini Herzlos" zeile="6"/>
   </spalteORT>
   <spalteORT name="Darmstadt" id="2">
      <m info="Rudi Rhodos" zeile="1"/>
      <m info="Karl Kolos" zeile="2"/>
      <m info="Simone Sinnlos" zeile="3"/>
      <m info="Horst Hirnlos" zeile="4"/>
      <m info="Werner Wertlos" zeile="5"/>
      <m info="Ludwig Lustlos" zeile="6"/>
   </spalteORT>
   <spalteORT name="Kapstadt" id="3">
      <m info="Willi Wasistlos" zeile="1"/>
      <m info="Rita Ruhelos" zeile="2"/>
      <m info="Susi Schlaflos" zeile="3"/>
      <m info="Lotte Rielos" zeile="4"/>
      <m info="Betty Bodenlos" zeile="5"/>
      <m info="Martin Muehelos" zeile="6"/>
      <m info="Liane Leinenlos" zeile="7"/>
   </spalteORT>

Die weitere Logik baut ausschließlich auf der Variable "vortspalte" auf. Nach der Headerzeile mit den drei Ortnamen startet eine Schleife, die von 1 bis zur maximalen Anzahl der Zeilen (berechnet in "vmaxzeilen") läuft. Zusätzlich wird die jeweilige Spalte festgehalten, so daß jedes Wertepaar aus Zeile und Spalte direkt ermittelt und die jeweiligen Inhalte aus der Variable "vortspalte" entnommen wird.

<html>
      <body>
         <table border="1">
            <tr>
               <th>Neustadt</th>
               <th>Darmstadt</th>
               <th>Kapstadt</th>
            </tr>
            <tr>
               <td>Hugo Holzflos</td>
               <td>Rudi Rhodos</td>
               <td>Willi Wasistlos</td>
            </tr>
            <tr>
               <td>Nicole Nixlos</td>
               <td>Karl Kolos</td>
               <td>Rita Ruhelos</td>
            </tr>
            <tr>
               <td>Stefan Sprachlos</td>
               <td>Simone Sinnlos</td>
               <td>Susi Schlaflos</td>
            </tr>
            <tr>
               <td>Stefan Sagblos</td>
               <td>Horst Hirnlos</td>
               <td>Lotte Rielos</td>
            </tr>
            <tr>
               <td>Siggi Sorglos</td>
               <td>Werner Wertlos</td>
               <td>Betty Bodenlos</td>
            </tr>
            <tr>
               <td>Heini Herzlos</td>
               <td>Ludwig Lustlos</td>
               <td>Martin Muehelos</td>
            </tr>
            <tr>
               <td/>
               <td/>
               <td>Liane Leinenlos</td>
            </tr>
         </table>
      </body>
   </html>

qrpic/Spaltenweise_programmieren.jpg

wg / 31. August 2017




Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf (info10@wilfried-grupe.de).



Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

Mobil: 0151. 750 360 61 * eMail: info10@wilfried-grupe.de