(aktualisiert!)

IT-Trainings in Zeiten des Corona-Virus, Veranstaltungstipps der www.gfu.net:
Schulung XML Einfuehrung und Grundlagen *** Schulung Python fuer Programmiereinsteiger *** Schulung XML, XSLT, XPath, XSL-FO Einfuehrung *** Schulung Java/JSP/HTML/JDBC/XML Komplett *** Schulung XML mit Altova XMLSpy *** Schulung XML Grundlagen, XSL-FO, SVG, DocBook, DITA *** Schulung XML - der professionelle Ueberblick *** Schulung XML-Schema Intensiv *** Schulung Einstieg in die Programmierung *** Schulung C++ fuer Programmiereinsteiger *** Schulung VB.NET fuer Visual Basic-Programmierer ***


XSL-Übersicht / XSLT-Konvertierung von XML nach HTML / Arbeiten mit xsl:for-each

Arbeiten mit xsl:for-each

Arbeiten mit xsl:for-each

➪ Die Arbeit mit xsl:for-each ermöglicht eine übersichtliche Programmierlogik, die den Programmiergewohnheiten vieler Developer sehr entgegenkommt und sich zudem weitgehend unabhängig von ausgelagerten Subroutinen realisieren lässt. Damit können gegenseitige Abhängigkeiten reduziert werden, was sich sehr positiv auf die Wartbarkeit der Applikationen auswirkt.

Siehe auch .

Alternativ zu <xsl:value-of select="position()"/> können Sie eine Nummerierung der sortierten Ergebnisse über <xsl:number format="A." value="position()"/> generieren. Mit erreichen Sie in beiden Fällen eine Ausgabe nach vorheriger Sortierung.

Mit können Sie gezielt formatieren; fehlt hier jedoch die Angabe value="position(), erfolgt die Nummerierung der Elemente vor etwaiger Sortierung, was die Nummerierung im Zieldokument unbrauchbar machen kann.


 <xsl:decimal-format name="euro" 
    decimal-separator="," 
    grouping-separator="."/>
 <xsl:template match="/">
  <html>
   <head>
    <title></title>
   </head>
   <body>
    <table border="1" width="100%">
     <thead>
      <tr>
       <th>Nr</th>
       <th>Nachname</th>
       <th>Vorname</th>
       <th>Wohnort</th>
       <th>Einkommen</th>
       <th>Ausgaben</th>
       <th>Flensburger Punkte</th>
      </tr>
     </thead>
     <tbody>
      <xsl:for-each select="/Orte/Ort/Mensch">
       <xsl:sort 
          select="Gehalt" 
          data-type="number" 
          order="descending" />
       <tr>
        <xsl:if test="position() mod 2 = 0">
         <xsl:attribute name="bgcolor">lightgrey</xsl:attribute>
        </xsl:if>
        <td>
         <xsl:value-of select="position()" />
        </td>
        <td>
         <xsl:value-of select="name" />
        </td>
        <td>
         <xsl:value-of select="vorname" />
        </td>
        <td>
         <xsl:value-of select="../name" />
        </td>
        <td align="right">
         <xsl:value-of
          select="format-number(Gehalt,
          '#.###,00 &#8364;', 'euro')" />
        </td>
        <td align="right">
         <xsl:choose>
          <xsl:when test="sum(Kauf/Gesamt) &gt; Gehalt">
           <xsl:attribute name="bgcolor">red</xsl:attribute>
          </xsl:when>
          <xsl:otherwise>
           <xsl:attribute name="bgcolor">yellow</xsl:attribute>
          </xsl:otherwise>
         </xsl:choose>
         <xsl:value-of
          select="format-number(sum(Kauf/Gesamt),
          '#.##0,00 &#8364;', 'euro')" />
        </td>
        <td align="center">
         <xsl:call-template name="listimport">
          <xsl:with-param name="plistnr">1</xsl:with-param>
          <xsl:with-param name="pkey">
           <xsl:value-of select="id" />
          </xsl:with-param>
         </xsl:call-template>
        </td>
       </tr>
      </xsl:for-each>
     </tbody>
    </table>
   </body>
  </html>
 </xsl:template>

Das Ergebnis sieht im Browser so aus:

pic/xml2html.jpg

Noch ein Tipp: Ab ist es möglich, die folgende Logik


<td align="right">
<xsl:choose>
 <xsl:when test="sum(Kauf/Gesamt) &gt; Gehalt">
  <xsl:attribute name="bgcolor">red</xsl:attribute>
 </xsl:when>
 <xsl:otherwise>
  <xsl:attribute name="bgcolor">yellow</xsl:attribute>
 </xsl:otherwise>
</xsl:choose></td>

kürzer auszudrücken:


<td align="right" 
    bgcolor="{if (sum(Kauf/Gesamt) &gt; Gehalt) then 'red' else 'yellow'}">

Vgl. auch .

wg / 13. August 2019



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.






Vielen Dank für Ihr Interesse an meiner Arbeit.



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

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

www.wilfried-grupe.de/XSL_XML2HTML1.html