Demo/Übung PC-Liste: Tabellen erzeugen

Lernziel

Lösungen

zu folgenden Aufgaben wird hier eine Schritt für Schritt Anleitung gezeigt:

  1. Geben Sie alle Rechner in Form einer Tabelle pro Raum aus.

  2. Das Ausgabeformat ist HTML, verwenden Sie XSL-Templates-Rules.

  3. Erstellen Sie dazu eine erste XSL-Datei und binden Sie diese in die XML-Datei ein.

  4. Validieren Sie die Dateien und geben Sie das fertige HTML in eine Datei pcliste.html aus.

Handlungsanweisungen

Neue Aufgaben

Wenn Sie die vier Aufgaben gelöst haben, besitzen sie eine erste Version. Verbessern Sie nun die vorhandene Version und lösen Sie die folgenden Aufgaben. Die Lösung dazu finden Sie wieder auf der nächsten Seite.

  1. Jede Tabelle soll als Überschrift die Raumbezeichnung enthalten.

  2. Platzieren Sie am Anfang eine Gesamtüberschrift.

Bild Peter
Zitat

„Reich wird man erst durch Dinge, die man nicht begehrt.“

Mahatma Gandhi

Lösung zu den Aufgaben

Das Grundgerüst der XSL-Datei

1
2
3
4
5
6
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html"/>
<xsl:template match="/">
  Hier kommt das Suchergebnis rein...
</xsl:template>
</xsl:stylesheet>

Das Attribut match “/” gibt das Wurzelelement zurück.Wenn es existiert, können wir das HTML-Gerüst erzeugen.

HTML-Grundgerüst erzeugen…

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html"/>
<xsl:template match="/">

 <html>
    <head>
      <title>Rechneruebersicht</title>
    </head>
    <body>
     Hier geht es mit dem Inhalt weiter...
    </body>
  </html>

</xsl:template>
</xsl:stylesheet>

Wenn wir dieses minimalistische Stylesheet auf die XML-Datei anwenden, bekommen wir eine fast leere HTML-Seite.

Erste Transformation

java  -jar saxon9.jar   pcliste.xml pcliste3.xsl

Beispielaufruf für den javabasierten Parser axon. Passen Sie die Pfade und Namen an Ihre Gegebenheiten an oder verwenden Sie einen Parser Ihrer Wahl.

XSL einbinden

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<?xml-stylesheet href="pcliste3.xsl" type="text/xsl" ?>
<xsl:output method="html"/>
<xsl:template match="/">

 <html>
    <head>
      <title>Rechneruebersicht</title>
    </head>
    <body>
     Hier geht es mit dem Inhalt weiter...
    </body>
  </html>

</xsl:template>
</xsl:stylesheet>

Für die direkte Betrachtung im Browser muß die XML-Datei mit der XSL-Datei verknüpft werden. Laden Sie jetzt die XML-Datei in den Browser.

Ein Element “raum” suchen

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html"/>
<xsl:template match="/">

 <html>
    <head>
      <title>Rechneruebersicht</title>
    </head>
    <body>
    <!--[weitere Regeln abarbeiten] -->
    <xsl:apply-templates />
    </body>
  </html>

</xsl:template>

<xsl:template match="pcliste/raum">
   <p>Das ist eine neue Regel die nur zutrifft,
       wenn der XPATH-Ausdruck "pcliste/raum" gefunden wird.
   </p>
</xsl:template>

</xsl:stylesheet>

Wenn keine spezielle Regel genannt wird, werden alle Regeln geprüft. Wenn die Regel zutrifft (XPATH im match-Attribut), wird mit den Anweisungen in der Template-Rule weitergemacht. Wir geben hier zu Testzwecken einen Satz aus und sollten sehen, das die Regel vier mal zutrifft. Laden Sie zu diesem Zweck die Datei in den Browser.

Tabellenkopf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html"/>
<xsl:template match="/">

 <html>
    <head>
      <title>Rechneruebersicht</title>
    </head>
    <body>
    <!--[weitere Regeln abarbeiten] -->
    <xsl:apply-templates />
    </body>
  </html>

</xsl:template>

<xsl:template match="pcliste/raum">

  <h2>Raum</h2>
  <table border="1">
    <tbody>
    <tr>
      <th>Anmerkung</th>
      <th>Rechner</th>
      <th>IP</th>
    </tr>
    <!--[weitere Regeln abarbeiten] -->
    <!-- xsl:apply-templates /-->
    </tbody>
  </table>

</xsl:template>

</xsl:stylesheet>

Wir geben jetzt statt eines Satzes eine Überschrift, gefolgt von einem Tabellenkopf aus. Testen Sie diese erweiterte Version.

Tabellezeile für jedes Element “rechner”

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html"/>
<xsl:template match="/">

 <html>
    <head>
      <title>Rechneruebersicht</title>
    </head>
    <body>
    <!--[weitere Regeln abarbeiten] -->
    <xsl:apply-templates />
    </body>
  </html>

</xsl:template>

<xsl:template match="pcliste/raum">

  <h2>Raum</h2>
  <table border="1">
    <tbody>
    <tr>
      <th>Anmerkung</th>
      <th>Rechner</th>
      <th>IP</th>
    </tr>
    <!--[weitere Regeln abarbeiten] -->
    <xsl:apply-templates />
    </tbody>
  </table>

</xsl:template>

<xsl:template match="rechner">
    <tr>
      <!-- xsl:apply-templates /-->
    </tr>
</xsl:template>

</xsl:stylesheet>

Immer wenn der Parser das Element rechner findet, soll eine HTML-Tabellenzeile erzeugt werden. In der Tabellenzeile rufen wir weitere Regeln ab. Prüfen Sie auch diese Version.

Zugriff auf den Inhalt

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html"/>
<xsl:template match="/">

 <html>
    <head>
      <title>Rechneruebersicht</title>
    </head>
    <body>
    <!--[weitere Regeln abarbeiten] -->
    <xsl:apply-templates />
    </body>
  </html>

</xsl:template>

<xsl:template match="pcliste/raum">

  <h2>Raum</h2>
  <table border="1">
    <tbody>
    <tr>
      <th>Anmerkung</th>
      <th>Rechner</th>
      <th>IP</th>
    </tr>
    <!--[weitere Regeln abarbeiten] -->
    <xsl:apply-templates />
    </tbody>
  </table>

</xsl:template>

<xsl:template match="rechner">
    <tr>
      <xsl:apply-templates />
    </tr>
</xsl:template>

<xsl:template match="anmerkung | rechnerip | rechnername">
  <td>
    <!--[Zugriff auf den Element-Inhalt] -->
    <xsl:value-of select="." />
  </td>
</xsl:template>
</xsl:stylesheet>

Wenn es sich um die Elemente anmerkung, rechnerip oder rechnername handelt, dann erzeugen wir ein Spalten-Element (td) und platzieren darin den Inhalt der gefundenen Elemente. Hier bricht die Abarbeitung ab, weil keine weiteren Regeln angewendet werden. Damit ist die erste Fassung unserer Raumverwaltung komplett.