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="'
'"/> 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«