XSLT 2.0-Code zum Projekt »planX4L« (planX4L.xsl)

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  3   xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="fn xs">
  4 
  5   <!-- XSL-Transformation zur Ausgabe der LAPIS-Planungsdatei im DOS-ASCII-Format by T. Meinike 06/11 -->
  6 
  7   <!-- Ausgabe-Kodierung "IBM437" entspricht dem LAPIS-ASCII-Format -->
  8   <xsl:output method="text" encoding="IBM437" media-type="text/plain"/>
  9 
 10   <!-- DOS/Windows-Zeilenumbruch \r\n -->
 11   <xsl:variable name="crlf" select="'&#xD;&#xA;'"/>
 12   <!-- Matrikel-Trennzeile: true() | false() -->
 13   <xsl:variable name="ma_trenner" select="true()"/>
 14 
 15   <xsl:template match="stundenplanung">
 16     <!-- Kopfzeilen -->
 17     <xsl:value-of select="fn:concat('L.A.P.I.S 2.5e', $crlf)"/>
 18     <xsl:value-of select="fn:concat('DATEN', $crlf)"/>
 19     <xsl:variable name="datum" select="fn:format-date(fn:current-date(), '[D01].[M01].[Y0001]')"/>
 20     <xsl:variable name="lz" select="fn:string-join((for $i in 1 to 46 - fn:string-length(@info) return ' '), '')"/>
 21     <xsl:value-of select="fn:concat(@info, $lz, $datum, $crlf)"/>
 22     <!-- matrikel-Verarbeitung -->
 23     <xsl:apply-templates select="matrikel"/>
 24   </xsl:template>
 25 
 26   <xsl:template match="matrikel">
 27     <!-- planung-Verarbeitung -->
 28     <xsl:apply-templates select="planung"/>
 29     <!-- Zeilenumbruch am Matrikel-Ende -->
 30     <xsl:if test="position() != last() and $ma_trenner">
 31       <xsl:value-of select="$crlf"/>
 32     </xsl:if>
 33   </xsl:template>
 34 
 35   <xsl:template match="planung">
 36     <!-- nur angebotene Fächer ausgeben -->
 37     <xsl:apply-templates select="fach[@ang = 'j']"/>
 38   </xsl:template>
 39 
 40   <xsl:template match="fach">
 41     <!-- LV-Nummer -->
 42     <xsl:value-of select="fn:concat(ancestor::matrikel/@fb, ancestor::matrikel/@stgnr, ancestor::matrikel/@semester, @plannr)"/>
 43     <xsl:text>|</xsl:text>
 44 
 45     <!-- LV-Name -->
 46     <xsl:value-of select="fn:concat(art, ' ', planname)"/>
 47     <xsl:text>|</xsl:text>
 48 
 49     <!-- Matrikel -->
 50     <xsl:value-of select="fn:concat(ancestor::matrikel/@mname, ancestor::matrikel/@semester)"/>
 51     <xsl:text>|</xsl:text>
 52 
 53     <!-- Stunden -->
 54     <xsl:value-of select="art/@plansws"/>
 55     <xsl:text>|</xsl:text>
 56 
 57     <!-- Kopplung -->
 58     <xsl:choose>
 59       <xsl:when test="kopplung/@mit"><xsl:value-of select="kopplung/@mit"/></xsl:when>
 60       <xsl:when test="kopplung/@von"><xsl:text>!!!!!</xsl:text></xsl:when>
 61     </xsl:choose>
 62     <xsl:text>|</xsl:text>
 63 
 64     <!-- Dozent -->
 65     <xsl:value-of select="fn:concat('F', dozent/@fb, ' ', dozent)"/>
 66     <xsl:text>|</xsl:text>
 67 
 68     <!-- Tag+Block|Raum -->
 69     <xsl:for-each select="termin[@raum != '???/?/???' and @zeit != '??-??' and @tag != '???????']">
 70       <xsl:choose>
 71         <xsl:when test="@tag = 'Montag'"><xsl:text>Mo</xsl:text></xsl:when>
 72         <xsl:when test="@tag = 'Dienstag'"><xsl:text>Di</xsl:text></xsl:when>
 73         <xsl:when test="@tag = 'Mittwoch'"><xsl:text>Mi</xsl:text></xsl:when>
 74         <xsl:when test="@tag = 'Donnerstag'"><xsl:text>Do</xsl:text></xsl:when>
 75         <xsl:when test="@tag = 'Freitag'"><xsl:text>Fr</xsl:text></xsl:when>
 76         <xsl:when test="@tag = 'Samstag'"><xsl:text>Sa</xsl:text></xsl:when>
 77       </xsl:choose>
 78       <xsl:choose>
 79         <xsl:when test="@zeit = '07-09'"><xsl:text>1</xsl:text></xsl:when>
 80         <xsl:when test="@zeit = '09-11'"><xsl:text>2</xsl:text></xsl:when>
 81         <xsl:when test="@zeit = '11-13'"><xsl:text>3</xsl:text></xsl:when>
 82         <xsl:when test="@zeit = '13-15'"><xsl:text>4</xsl:text></xsl:when>
 83         <xsl:when test="@zeit = '15-17'"><xsl:text>5</xsl:text></xsl:when>
 84         <xsl:when test="@zeit = '17-19'"><xsl:text>6</xsl:text></xsl:when>
 85         <xsl:when test="@zeit = '19-21'"><xsl:text>7</xsl:text></xsl:when>
 86       </xsl:choose>
 87       <xsl:text>|</xsl:text>
 88       <xsl:value-of select="@raum"/>
 89       <xsl:text>|</xsl:text>
 90     </xsl:for-each>
 91 
 92     <!-- Kommentar -->
 93     <xsl:choose>
 94       <xsl:when test="fn:string-length(kommentar) gt 0"><xsl:value-of select="fn:concat('\', kommentar)"/></xsl:when>
 95       <xsl:otherwise><xsl:text>\</xsl:text></xsl:otherwise>
 96     </xsl:choose>
 97     <xsl:text>|</xsl:text>
 98 
 99     <!-- Teilnehmerzahl -->
100     <xsl:value-of select="@stud"/>
101     <xsl:text>|</xsl:text>
102 
103     <!-- LV-Art -->
104     <xsl:value-of select="art"/>
105     <xsl:text>|</xsl:text>
106 
107     <!-- Raumausstattung, praktisch immer leer, @ra ist optional -->
108     <xsl:if test="@ra">
109       <xsl:value-of select="@ra"/>
110     </xsl:if>
111     <xsl:text>|</xsl:text>
112 
113     <!-- Woche: wöchentlich / gerade / ungerade -->
114     <xsl:choose>
115       <xsl:when test="termin[1]/@woche = 'w' or termin[1]/@woche = '?'"><xsl:text>1|1|0|@|64</xsl:text></xsl:when>
116       <xsl:when test="termin[1]/@woche = 'g'"><xsl:text>1|1|2|D|68</xsl:text></xsl:when>
117       <xsl:when test="termin[1]/@woche = 'u'"><xsl:text>1|1|1|H|72</xsl:text></xsl:when>
118     </xsl:choose>
119 
120     <!-- Zeilenumbruch am jeweiligen Datensatz-Ende -->
121     <xsl:value-of select="$crlf"/>
122 
123     <!--
124          Beispiel-Ergebniszeile:
125          2250110|VÜ AZ-Spr. I (HTML)|MTRWK1|4|1234567|F2 Meinike|Mo2|124/1/020|Mo3|124/1/020|\Test|25|VÜ||1|1|1|H|72         
126     -->
127 
128   </xsl:template>
129 
130 </xsl:stylesheet>

Code formatiert mit »Highlight 3.5«