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


xsl:for-each select

xsl:for-each select

Das erste Beispiel listet lediglich alle Ortnamen aus dem XML-Quelldokument auf. Das Template-Match / definiert das Ausgabedokument mit HTML-spezifischen Tags; an passender Stelle wird über eine XSL-Schleife eine Liste aller Ort-Knoten angesprochen, die über XPath definiert werden kann. Mit xsl:value-of select wird dann der Inhalt eines Elements ausgelesen, der wiederum über XPath definiert werden kann, hier: der ChildNode name von jedem Ort.

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <html>
      <body>
        <h3>Zweite Transformation aus XML</h3>
        <xsl:for-each select="/Orte/Ort">
          <p>
            Der Ort heisst <b><xsl:value-of select="name"/></b>
          </p>
        </xsl:for-each>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

Mit der Anweisung xsl:for-each ist es möglich, dem select-Attribut ein XPath-Statement zu übergeben, das aus einem XML-Input gezielt Werte auswählt. In der folgenden Abbildung werden lediglich Mensch-Elemente ausgewählt, deren Gehalt unter 1000 liegt. Die beiden Einträge Nicole Nixlos und Stefan Sprachlos, deren Gehalt-Elemente darüber liegen, werden ignoriert.

pic/foreach.png

Eine zusätzliche xsl:sort-Anweisung sorgt dafür, daß die Ergebnisliste inhaltlich sortiert wird, und zwar absteigend nach dem Gehalt. Dadurch wird die ursprüngliche Reihenfolge verworfen und in eine neue Reihenfolge transformiert, die über die position()-Funktion neu numeriert wird. Siggi Sorglos, der in der ursprünglichen Reihenfolge an 5. Stelle lag, kommt nun in der Zielstruktur auf Platz 1. Hugo Holzflos lag in der ursprünglichen Reihenfolge auf Platz 1, liegt nun auf Platz 4.

Die dazu gehörige Implementierung sieht folgendermaßen aus:

 <xsl:template match="/">
  <html>
   <body>
    <table>
     <xsl:for-each select="//Mensch[Gehalt &lt; 1000]">
      <xsl:sort select="Gehalt" data-type="number" order="descending" />
      <tr>
       <td>
        <xsl:value-of select="position()" />
       </td>
       <td>
        <xsl:value-of select="id" />
       </td>
       <td>
        <xsl:value-of select="name" />
       </td>
       <td>
        <xsl:value-of select="vorname" />
       </td>
       <td>
        <xsl:value-of select="Gehalt" />
       </td>
       <td>
        <xsl:value-of select="idOrt" />
       </td>
      </tr>
     </xsl:for-each>
    </table>
   </body>
  </html>
 </xsl:template>

qrpic/xsl_Beispiel1_.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