Beruflich Dokumente
Kultur Dokumente
Marko Hedler
Probeklausur:
XML-Technologien
2. Themenblock: XPath
1. Allgemeine Fragen
2. Aufgabe:
Gegeben ist folgendes XML-Dokument:
Geben Sie einen XPath-Ausdruck an, der folgende Knotenmengen lokalisiert: (10 Punkte)
1. Alle Postleitzahlen
2. Alle Personen die 1972 geboren sind.
3. Die Vornamen aller Personen die Schmidt mit Nachnamen heißen.
4. Die Personen-Elemente deren einziges Hobby Konzert ist.
5. Den Wohnort der Personen die vor 1970 geboren wurden.
1. //PLZ
2. //Person[@geburtsjahr='1972']
3. //Person/@vorname[../@nachname='Schmidt']
4. //Person[Hobbies='Konzert']
5. //Ort[../../@geburtsjahr<1970]
2. Programmieraufgabe ( 15 Punkte)
Gegeben ist folgendes XML Dokument:
<Company>
<Employee email="TBrowne@Infoteria.com">
<FirstName>Tim</FirstName>
<LastName>Browne</LastName>
<Position>CEO</Position>
<Category>Officer</Category>
<Age>25</Age>
</Employee>
<Employee email="HeadGeek@XMLPitstop.com">
<FirstName>David</FirstName>
<MiddleName>Michael</MiddleName>
<LastName>Silverlight</LastName>
<Position>Chief XML Evangelist</Position>
<Category>Evangelist</Category>
<Age>33</Age>
</Employee>
<Employee email="MDamphouse@Infoteria.com">
<FirstName>Mike</FirstName>
<LastName>Damphouse</LastName>
<Position>Chief Marketing Officer</Position>
<Category>Officer</Category>
<Age>33</Age>
</Employee>
</Company>
Transformieren Sie mit Hilfe eines XSLT-Skripts dieses XML-Dokument nach HTML. Beachten Sie dabei
folgende Richtlinien:
- Geben Sie die Informationen zu den Angestellten in einer Tabelle aus
- Die Tabellenspalten lauten: Name, Position und Email
- In der Spalte Name sollen sowohl die Informationen aus FirstName als auch aus LastName
stehen.
- Am Ende der Tabelle soll ein Absatz stehen der die Gesamtzahl der Angestellten zählt und
ausgibt. (Die nötige XPATH Funktion dafür ist count(..) )
- Verwenden Sie für die Umsetzung das Pull-Programmiermethode.
Verwenden Sie für Ihre Lösung das vorhandene Codefragment als gegeben:
<xsl:template match="/">
<html>
<head>
<title>Firmeninformation</title>
</head>
<body>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Lösung:
</td>
<td>
<xsl:value-of select="@email"/>
</td>
</tr>
</xsl:for-each>
</table>
<p style="font-family: Arial">
Gesamtzahl aller Angestellten:<xsl:text> </xsl:text>
<xsl:value-of select="count(Company/Employee)"/>
</p>
Mit Hilfe von XSLT soll nun ein Korrekturauszug in Form eines PDF’s erzeugt werden. Dabei soll das
Dokument vollautomatisch nach XSL-FO transformiert werden.
Folgende Ausgabe soll dabei erzeugt werden:
<xsl:template match="/">
<fo:root>
<fo:layout-master-set>
<fo:simple-page-master master-name="A4">
<fo:region-body margin="40mm 40mm 40mm 40mm"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="A4">
<fo:flow flow-name="xsl-region-body">
<fo:block>
<xsl:apply-templates/>
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
</xsl:stylesheet>
Lösung:
<xsl:template match="titel">
<fo:block font-size="24pt">
<xsl:apply-templates/>
</fo:block>
</xsl:template>
<xsl:template match="untertitel"></xsl:template>
<xsl:template match="datum"></xsl:template>
<xsl:template match="abs" >
<fo:block font-size="12pt">
<xsl:apply-templates/>
</fo:block>
</xsl:template>
<xsl:template match="kursiv">
<fo:inline font-style="italic">
<xsl:apply-templates/>
</fo:inline>
</xsl:template>
<xsl:template match="reg">
<xsl:apply-templates/>
<fo:inline font-weight="bold">[
<xsl:value-of select="@ref"/>]
</fo:inline>
</xsl:template>