Announcement

Collapse
No announcement yet.

Hilfe, Anfänger.

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Hilfe, Anfänger.

    Hallo ihr Lieben,
    erstmal meine XML Datei und das zugehörige Stylesheet.. mit Oxygen funktioniert auch alles einwandfrei soweit:

    XML
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <?xml-stylesheet type="text/xsl" href="Datenbank.xsl" ?>
    <Datenbank>

    <Personenverzeichnis>
    <Personen>

    <Person>
    <Name>Meier</Name>
    <Vorname>Sarah</Vorname>
    <Matrikelnummer>1111</Matrikelnummer>
    </Person>

    <Person>
    <Name>Müller</Name>
    <Vorname>Elisa</Vorname>
    <Matrikelnummer>22222</Matrikelnummer>
    </Person>

    <Person>
    <Name>Otto</Name>
    <Vorname>Karl</Vorname>
    <Matrikelnummer>3333</Matrikelnummer>
    </Person>
    </Personen>
    </Personenverzeichnis>


    <Veranstaltungsverzeichnis>
    <Veranstaltungen>

    <Veranstaltung>
    <Nummer>23</Nummer>
    <Name>BWL</Name>
    <Semester>Sommersemester 2016</Semester>
    <Modulkürzel>M23</Modulkürzel>
    </Veranstaltung>

    <Veranstaltung>
    <Nummer>24</Nummer>
    <Name>Medien</Name>
    <Semester>Wintersemester 2016</Semester>
    <Modulkürzel>M25</Modulkürzel>
    </Veranstaltung>

    <Veranstaltung>
    <Nummer>25</Nummer>
    <Name>Informatik</Name>
    <Semester>Sommersemester 2015</Semester>
    <Modulkürzel>M21</Modulkürzel>
    </Veranstaltung>

    <Veranstaltung>
    <Nummer>26</Nummer>
    <Name>Mathe</Name>
    <Semester>Sommersemester 2016</Semester>
    <Modulkürzel>M24</Modulkürzel>
    </Veranstaltung>

    <Veranstaltung>
    <Nummer>27</Nummer>
    <Name>Geschichte</Name>
    <Semester>Wintersemester 2015</Semester>
    <Modulkürzel>M27</Modulkürzel>
    </Veranstaltung>


    </Veranstaltungen>
    </Veranstaltungsverzeichnis>

    <Liste>
    <Leistungsstatistiken>

    <Leistung>
    <Nummer>23</Nummer>
    <Name>BWL</Name>
    <Datum>01.04.2016</Datum>

    <Matrikelnummer>1111</Matrikelnummer>
    <Note>1,0</Note>
    </Leistung>

    <Leistung>
    <Nummer>24</Nummer>
    <Name>Medien</Name>
    <Datum>01.12.2016</Datum>

    <Matrikelnummer>22222</Matrikelnummer>
    <Note>3,7</Note>
    </Leistung>

    <Leistung>
    <Nummer>25</Nummer>
    <Name>Informatik</Name>
    <Datum>30.09.2015</Datum>

    <Matrikelnummer>1111</Matrikelnummer>
    <Note>1,7</Note>
    </Leistung>

    <Leistung>
    <Nummer>26</Nummer>
    <Name>Mathe</Name>
    <Datum>21.07.2016</Datum>

    <Matrikelnummer>3333</Matrikelnummer>
    <Note>2,7</Note>
    </Leistung>

    <Leistung>
    <Nummer>27</Nummer>
    <Name>Geschichte</Name>
    <Datum>30.09.2015</Datum>

    <Matrikelnummer>1111</Matrikelnummer>
    <Note>4,0</Note>
    </Leistung>

    <Leistung>
    <Nummer>23</Nummer>
    <Name>BWL</Name>
    <Datum>01.04.2016</Datum>

    <Matrikelnummer>3333</Matrikelnummer>
    <Note>4,0</Note>
    </Leistung>

    <Leistung>
    <Nummer>24</Nummer>
    <Name>Medien</Name>
    <Datum>01.12.2016</Datum>

    <Matrikelnummer>1111</Matrikelnummer>
    <Note>4,0</Note>
    </Leistung>

    <Leistung>
    <Nummer>25</Nummer>
    <Name>Informatik</Name>
    <Datum>30.09.2015</Datum>
    <Matrikelnummer>3333</Matrikelnummer>
    <Note>4,0</Note>
    </Leistung>

    </Leistungsstatistiken>
    </Liste>


    </Datenbank>

    Transformationsdatei:

    ?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns="http://www.w3.org/TR/REC-html40">
    <xslutput method="html"/>

    <xsl:template match="/Datenbank">
    <html>
    <body>

    <h1>Personenverzeichnis</h1>
    <table border="2">
    <tr>
    <th>Name</th>
    <th>Vorname</th>
    <th>Matrikelnummer</th>
    </tr>

    <xsl:for-each select="Personenverzeichnis/Personen/Person">
    <tr>
    <td><xsl:value-of select="Name" /></td>
    <td><xsl:value-of select="Vorname" /></td>
    <td><xsl:value-of select="Matrikelnummer" /></td>
    </tr>
    </xsl:for-each>

    </table>
    <h1>Vorlesungsverzeichnis</h1>
    <table border="2">
    <tr>
    <th>Nummer</th>
    <th>Name</th>
    <th>Semester</th>
    <th>Modulkürzel</th>
    </tr>
    <xsl:for-each select="Veranstaltungsverzeichnis/Veranstaltungen/Veranstaltung">
    <tr>

    <td><xsl:value-of select="Nummer" /></td>
    <td><xsl:value-of select="Name"/></td>
    <td><xsl:value-of select="Semester"/></td>
    <td><xsl:value-of select="Modulkürzel"/></td>
    </tr>
    </xsl:for-each>
    </table>

    <h1>Leistungen</h1>
    <table border="2">
    <tr>
    <th>Nummer</th>
    <th>Name</th>
    <th>Datum</th>
    <th>Matrikelnummer</th>
    <th>Note</th>

    </tr>
    <xsl:for-each select="Liste/Leistungsstatistiken/Leistung">

    <tr>

    <td><xsl:value-of select="Nummer" /></td>
    <td><xsl:value-of select="Name"/></td>
    <td><xsl:value-of select="Datum"/></td>
    <td><xsl:value-of select="Matrikelnummer"/></td>

    <td><xsl:value-of select="Note"/></td>

    </tr>


    </xsl:for-each>
    </table>


    </body>
    </html>
    </xsl:template>

    </xsl:stylesheet>


    Jetzt hab ich folgendes Problem:

    ich würde nun gerne die Durchschnittsnote von einer Person,beispielsweise Matrikelnummer 1111 errechnen.
    Wie genau mach ich das?
    Wo muss die Anweisung überhaupt eingefügt werden??

  • #2
    Diese Antwort kommt spät, ist vielleicht dennoch interessant. XSLT 2.0 vorausgesetzt (also version="2.0"), ist die Lösung relativ kurz bzw. kompakt. In neuer Tabellenzelle beim Personenverzeichnis formuliert:

    Code:
    <xsl:for-each select="Personenverzeichnis/Personen/Person">
      <tr>
        <td>
          <xsl:value-of select="Name"/>
        </td>
        <td>
          <xsl:value-of select="Vorname"/>
        </td>
        <td>
          <xsl:value-of select="Matrikelnummer"/>
        </td>
        <td>
          <xsl:variable name="mnr" select="Matrikelnummer"/>
          <xsl:value-of select="avg(for $n in //Leistung[Matrikelnummer = $mnr]/Note return number(replace($n, ',', '.')))"/>
        </td>
      </tr>
    </xsl:for-each>
    Für die Person mit der Matrikelnummer 1111 ergibt sich als Durchschnitt: 1 | 1,7 | 4,0 | 4,0 → 2.675

    Kann man auch noch runden.

    Comment

    Working...
    X