XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten...

69
XPath, XSLT Ulrich Hoffmann <[email protected]> 1

Transcript of XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten...

Page 1: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

XPath, XSLT

Ulrich Hoffmann <[email protected]>

1

Page 2: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Übersicht

XPath

XSLT

2

Page 3: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

XPathXML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren

Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen)

abgekürzte und ausführliche Schreibweise

W3C Recomendations seit 1999 XPath 1.0, 3. 11. 2005 XPath 2.0http://www.w3.org/TR/xpath xpath20

3

Page 4: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Syntax: Ortsbestimmungs-Pfade

Durch / getrennte Liste von Ortsbestimmungs-Schritten: (location path, location step)

Element-Namen name Attributnamen @nameWildcards * . .. Bedingungen [ XPath-Ausdruck ]Aufruf vordefinierter XPath-Funktionen fun( )absolute Pfade beginnen mit /

4

Page 5: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Beispiel/*/greet[@lang='de']/text()

<?xml version=”1.0” encoding=”UTF-8”?><greetings>! Dieses XML-Dokument enthält Grußtexte ! <greet lang=”de”>Guten Tag!</greet>! <greet lang=”fr”>Bon Jour!</greet></greetings>

5

Page 6: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Beispiel/*/greet[@lang='de']/text()

<?xml version=”1.0” encoding=”UTF-8”?><greetings>! Dieses XML-Dokument enthält Grußtexte ! <greet lang=”de”>Guten Tag!</greet>! <greet lang=”fr”>Bon Jour!</greet></greetings>

6

Page 7: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Beispiel/*/greet[@lang='de']/text()

<?xml version=”1.0” encoding=”UTF-8”?><greetings>! Dieses XML-Dokument enthält Grußtexte ! <greet lang=”de”>Guten Tag!</greet>! <greet lang=”fr”>Bon Jour!</greet></greetings>

7

Page 8: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Beispiel/*/greet[@lang='de']/text()

<?xml version=”1.0” encoding=”UTF-8”?><greetings>! Dieses XML-Dokument enthält Grußtexte ! <greet lang=”de”>Guten Tag!</greet>! <greet lang=”fr”>Bon Jour!</greet></greetings>

8

Page 9: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Beispiel/*/greet[@lang='de']/text()

<?xml version=”1.0” encoding=”UTF-8”?><greetings>! Dieses XML-Dokument enthält Grußtexte ! <greet lang=”de”>Guten Tag!</greet>! <greet lang=”fr”>Bon Jour!</greet></greetings>

9

Page 10: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Beispiel/*/greet[@lang='de']/text()

<?xml version=”1.0” encoding=”UTF-8”?><greetings>! Dieses XML-Dokument enthält Grußtexte ! <greet lang=”de”>Guten Tag!</greet>! <greet lang=”fr”>Bon Jour!</greet></greetings>

Guten Tag!

10

Page 11: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Werte von Ausdrücken

Ergebniss von XPath-Ausdrücken sind

Knotenmengen (Node-Sets)

Strings

Zahlen

boolesche Werte

11

Page 12: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Relative Pfade

beginnen nicht mit /

sind relativ zum aktuellen Knotenbestimmt durch:

verschachtelt XPath-Ausdrücke z.B. bei [ Bedingungen ]

12

Page 13: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

erweiterte Syntax

Ortsbestimmungs-Schritte haben die allgemeine Form:

Achse:: Knoten-Test[Prädikat]

z.B. child::greet[attribute::lang='de']

13

Page 14: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

XPath-AchsenBestimmen die “Richtung” in der Knoten ermittelt werden

self im aktuellen Knoten selbst

parent im Elternknoten

child in den direkten Kindknoten (default)

attribute in den Attributen des aktuellen Knotens (abgekürzt durch @)

14

Page 15: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

mehr XPath-Achsenancestor in direkten und indirekten Elternknoten

descendant in direkten und indirekten Kind-Knoten

ancestor-or-self

descendant-or-self

15

Page 16: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

mehr XPath-Achsenfollowing-sibling, preceding-sibling dem aktuellen Knoten folgende bzw. vorangehende Knoten mit gleichem Elternelement

following, preceeding im Dokument folgende bzw. vorangehende Knoten

namespace

16

Page 17: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Beispiel/*/child::greet[attribute::lang='de']/text()

<?xml version=”1.0” encoding=”UTF-8”?><greetings>! Dieses XML-Dokument enthält Grußtexte ! <greet lang=”de”>Guten Tag!</greet>! <greet lang=”fr”>Bon Jour!</greet></greetings>

17

Page 18: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Knoten-TestElementName selektiert Subelemente mit gegebenem Namen* selektiert Elemente mit beliebigem Namen /*comment() text() processing-instruction() node()// steht für descendent-or-self::node(). steht für self::node().. steht für parent::node()

18

Page 19: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

PrädikateXPath-Ausdrücke mit booleschem Ergebnis

aktueller Knotenmenge ist die durch vorhergehende Ortsbestimmungs-Schritte bestimmt

selektiert alle Knoten, für die das Prädikat wahr ist.

[ i ] steht für [position() = i]

19

Page 20: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

XPath Ausdrücke

logische und arithmetische Ausdrücke

= != > < >= <= Achtung mit < -> &lt;

and or + - * div mod

name, count, last, position, sum

Stringfunktionen

20

Page 21: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

XPath Variablen

Xpath hat Variablen $var

Werte werden durch äußeren Kontext gegeben, z.B. XSLT

21

Page 22: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Beispiel: Navigieren

<?xml version="1.0"?><purchaseOrder orderDate="1999-10-20"> <shipTo country="US"> <name>Alice Smith</name> <street>123 Maple Street</street> <city>Mill Valley</city> <state>CA</state><zip>90952</zip> </shipTo> <billTo country="US"> <name>Robert Smith</name> <street>8 Oak Avenue</street> <city>Old Town</city> <state>PA</state><zip>95819</zip> </billTo> <comment>Hurry, my lawn is going wild!</comment> <items> <item partNum="872-AA"> <productName>Lawnmower</productName> <quantity>1</quantity> <USPrice>148.95</USPrice> <comment>Confirm this is electric</comment> </item> <item partNum="926-AA"> <productName>Baby Monitor</productName> <quantity>1</quantity> <USPrice>39.98</USPrice> <shipDate>1999-05-21</shipDate> </item> </items></purchaseOrder>

sum(/purchaseOrder/items/item/USPrice)

188.93

/purchaseOrder/items/item/@partNum

partNum=”872-AA”partNum=”926-AA”

22

Page 23: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

XPath-ExplorerInteraktiver Editor für XPath Ausdrückehttp://xpe.sourceforge.net/

23

Page 24: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

XPath ist mehrXPath 2.0 Erweiterungen

reguläre Ausdrücke

Sequenzen

Variablen mit Typen (aus XML-Schema)

24

Page 25: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

XSLTXML mit XML transformieren

25

Page 26: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

XSLTWas ist XSLT?

Wie transformiert XSLT die XML-Daten?

Wie arbeiten XPath und XSLT zusammen?

W3C-Recommendation:

XSLT 1.0 16. Nov 1999 http://www.w3.org/TR/xslt

XSLT 2.0 3. Nov 2005 http://www.w3.org/TR/xslt20/

26

Page 27: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Was ist XSLT?eXtensible Stylesheet Language for TransformationsRegelbasierte Programmiersprache zum Transformieren von XML-Dokumenten

XML XSLT Prozessor

HTML

Text

Java

PDF

XML

PythonC++JavaScript...

SVGXHTMLVRMLXSLT...

XSLT

Script

27

Page 28: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Beispiel: Wetterlage<?xml version="1.0" encoding="ISO8859-1" ?>

<wetter datum="2005-03-27" region="Schleswig-Holstein">

<ort name="Flensburg" temp="4">Regenschauer</ort>

<ort name="Fehmarn" temp="3">bedeckt</ort>

<ort name="Heide" temp="9">wolkig</ort>

<ort name="Itzehoe" temp="8">bedeckt</ort>

<ort name="Kiel" temp="4">bedeckt</ort>

<ort name="List auf Sylt" temp="5">bedeckt</ort>

<ort name="Lübeck" temp="7">bedeckt</ort>

<ort name="Rendsburg" temp="5">bedeckt</ort>

<ort name="Schleswig" temp="4">Regen</ort>

<ort name="St.Peter" temp="6">bedeckt</ort>

</wetter>

28

Page 29: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Ausgabe einer HTML-Tabelle

Wetter in Schleswig-Holstein am 27. 3. 2005

Ort Temperatur Wetterlage

Flensburg 4 °C Regenschauer

Fehmarn 3 °C bedeckt

Heide 9 °C wolkig

Itzehoe 8 °C bedeckt

Kiel 4 °C bedeckt

List auf Sylt 5 °C bedeckt

Lübeck 7 °C bedeckt

Rendsburg 5 °C bedeckt

Schleswig 4 °C Regen

St.Peter 6 °C bedeckt

Durchschnittstemperatur = 5.5 °C

29

Page 30: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Ausgabe eines Balkendiagramms (SVG)

30

Page 31: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Wozu XSLT?Darstellung von XML-Daten- Präsentation im Web- gedruckte Dokumente- Daten darstellungs-unabhängig in XML- XSLT bereitet Darstellung auf

Anpassung und Konvertierung zwischen XML-Formaten (z.B. für Datenmigration)

Allgemeine Verarbeitung von XML

31

Page 32: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Wie sieht ein XSLT-Script aus?XSLT-Programme (Stylesheets) haben XML-Syntax

Sie enthalten Sammlung von Regeln, die angeben, wie XML-Knoten transformiert werden sollen.

Beispiel: Erzeugen von HTML

<?xml version="1.0"?><greetings> <greet>Guten Tag!</greet> <greet>Bon Jour!</greet></greetings>

<html> <body> <h1>Guten Tag!</h1> <h1>Bon Jour!</h1> </body></html>

XSLT

32

Page 33: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Beispiel XSLT-Script<xsl:stylesheet

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="1.0"><xsl:output method="html"/>

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

<body><xsl:apply-templates select="greetings/greet"/>

</body></html>

</xsl:template>

<xsl:template match="greet"><h1><xsl:value-of select="."/></h1>

</xsl:template>

</xsl:stylesheet>

33

Page 34: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

<xsl:stylesheetxmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="1.0"><xsl:output method="html"/>

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

<body><xsl:apply-templates select="greetings/greet"/>

</body></html>

</xsl:template>

<xsl:template match="greet"><h1><xsl:value-of select="."/></h1>

</xsl:template>

</xsl:stylesheet>

Beispiel XSLT-ScriptProgrammrahmen

34

Page 35: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

<xsl:stylesheetxmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="1.0"><xsl:output method="html"/>

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

<body><xsl:apply-templates select="greetings/greet"/>

</body></html>

</xsl:template>

<xsl:template match="greet"><h1><xsl:value-of select="."/></h1>

</xsl:template>

</xsl:stylesheet>

Beispiel XSLT-ScriptAusgabe-Spezifikation

35

Page 36: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

<xsl:stylesheetxmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="1.0"><xsl:output method="html"/>

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

<body><xsl:apply-templates select="greetings/greet"/>

</body></html>

</xsl:template>

<xsl:template match="greet"><h1><xsl:value-of select="."/></h1>

</xsl:template>

</xsl:stylesheet>

Beispiel XSLT-ScriptTransformations-regeln

36

Page 37: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Demo

37

Page 38: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Warum “Stylesheet”-Language

Cascading Stylesheets (.css)

Legt Darstellung von HTML-Elementen fest

Z.B. Hyper-Links in blau, Überschriften fett und rot, ...

Ursprüngliche Aufgabe für XSLT

CSS und XSLT ergänzen sich

38

Page 39: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

<xsl:stylesheetxmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="1.0"><xsl:output method="html"/>

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

<body><xsl:apply-templates select="greetings/greet"/>

</body></html>

</xsl:template>

<xsl:template match="greet"><h1><xsl:value-of select="."/></h1>

</xsl:template>

</xsl:stylesheet>

Beispiel XSLT-Script

39

Page 40: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Wie arbeitet ein XSLT-Prozessor?Vorbereitung• Einlesen und Verarbeiten des XSLT-Scripts• Festlegen des Ausgabeformats• Einlesen der XML-Eingabe in eine Baumstruktur

<?xml version="1.0"?><greetings> <greet>Guten Tag!</greet> <greet>Bon Jour!</greet></greetings>

Wurzel-Knoten /

Verarbeitungs-

Anweisung

<?xml ... ?>

Dokument-Element

<greetings>...</greetings>

Guten Tag! Bon Jour!

Sub-Element

<greet>...</greet>

Sub-Element

<greet>...</greet>

40

Page 41: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

XSLT-KontextKontext-KnotenlisteListe der zu bearbeitenden Knoten

Kontext-Knotenaktuell zu bearbeitender Knoten

(Variablenbindungen, Funktionsbibliothek, Namensräume, ...)

41

Page 42: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Kontext-InitialisierungKontext-Knotenliste: nur WurzelknotenKontext-Knoten: Wurzel-Knoten

Wurzel-Knoten /

Verarbeitungs-

Anweisung

<?xml ... ?>

Dokument-Element

<greetings>...</greetings>

Guten Tag! Bon Jour!

Sub-Element

<greet>...</greet>

Sub-Element

<greet>...</greet>

42

Page 43: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Wie arbeitet ein XSLT-Prozessor?

Wiederhole

Wende eine passende Regel auf den Kontext-Knoten an.

Wähle den nächsten Knoten aus der Kontext-Knotenliste.

bis Kontext-Knotenliste vollständig abgearbeitet

43

Page 44: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

RegelanwendungIn Frage kommende Regeln

xsl:template-Definitionen im Scriptvordefinierte RegelnRekursives Anwenden von Regeln auf Elemente und TexteAusgabe von Werten für Attribute und TexteIgnorieren von Verarbeitungs-Anweisungen/Kommentaren

Wenn mehrere Regeln in Frage kommendie speziellste Regel wird angewendet

44

Page 45: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Vordefinierte RegelnAuf jedes Knoten (rekursiv) die passenden Regeln anwenden:<xsl:template match="*|/">

<xsl:apply-templates/></xsl:template>

Auf jeden Knoten die passenden Regeln des jeweiligen Modes anwenden:<xsl:template match="*|/" mode="x">

<xsl:apply-templates mode="x"/></xsl:template>

45

Page 46: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Vordefinierte Regeln

Text und Attribut-Werte ausgeben<xsl:template match="text()|@*">

<xsl:value-of select="."/></xsl:template>

Kommentare und Verarbeitungsanweisungen überspringen<xsl:template match="comment()|processing-instruction()"/>

Namespace-Definitionen überspringen<xsl:template match="namespace()"/>

46

Page 47: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

<xsl:stylesheetxmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="1.0">

<xsl:output method="html"/>

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

<body><xsl:apply-templates select="greetings/greet"/>

</body></html>

</xsl:template>

<xsl:template match="greet"><h1><xsl:value-of select="."/></h1>

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

Wurzel-Knoten /

Verarbeitungs-

Anweisung

<?xml ... ?>

Dokument-Element

<greetings>...</greetings>

Guten Tag! Bon Jour!

Sub-Element

<greet>...</greet>

Sub-Element

<greet>...</greet>

47

Page 48: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Ausgewählte Regel:

Wurzel-Knoten /

Verarbeitungs-

Anweisung

<?xml ... ?>

Dokument-Element

<greetings>...</greetings>

Guten Tag! Bon Jour!

Sub-Element

<greet>...</greet>

Sub-Element

<greet>...</greet>

<xsl:template match="/"> <html> <body> <xsl:apply-templates select="greetings/greet"/> </body> </html></xsl:template>

48

Page 49: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

<xsl:template match="/"> <html> <body> <xsl:apply-templates select="greetings/greet"/> </body> </html></xsl:template>

Ausgewählte Regel:

Wurzel-Knoten /

Verarbeitungs-

Anweisung

<?xml ... ?>

Dokument-Element

<greetings>...</greetings>

Guten Tag! Bon Jour!

Sub-Element

<greet>...</greet>

Sub-Element

<greet>...</greet>

Ausgabe: <html><body>

49

Page 50: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

<xsl:template match="/"> <html> <body> <xsl:apply-templates select="greetings/greet"/> </body> </html></xsl:template>

Ausgabe: <html><body>

Wurzel-Knoten /

Verarbeitungs-

Anweisung

<?xml ... ?>

Dokument-Element

<greetings>...</greetings>

Guten Tag! Bon Jour!

Sub-Element

<greet>...</greet>

Sub-Element

<greet>...</greet>

Ausgewählte Regel:

Regeln auf neue

Kontext-Knotenliste

anwenden

50

Page 51: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

<xsl:stylesheetxmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="1.0">

<xsl:output method="html"/>

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

<body><xsl:apply-templates select="greetings/greet"/>

</body></html>

</xsl:template>

<xsl:template match="greet"><h1><xsl:value-of select="."/></h1>

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

Wurzel-Knoten /

Verarbeitungs-

Anweisung

<?xml ... ?>

Dokument-Element

<greetings>...</greetings>

Guten Tag! Bon Jour!

Sub-Element

<greet>...</greet>

Sub-Element

<greet>...</greet>

Ausgabe: <html><body>

51

Page 52: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Wurzel-Knoten /

Verarbeitungs-

Anweisung

<?xml ... ?>

Dokument-Element

<greetings>...</greetings>

Guten Tag! Bon Jour!

Sub-Element

<greet>...</greet>

Sub-Element

<greet>...</greet>

Ausgewählte Regel:<xsl:template match="greet"> <h1><xsl:value-of select="."/></h1></xsl:template>

Ausgabe: <html><body>

52

Page 53: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Wurzel-Knoten /

Verarbeitungs-

Anweisung

<?xml ... ?>

Dokument-Element

<greetings>...</greetings>

Guten Tag! Bon Jour!

Sub-Element

<greet>...</greet>

Sub-Element

<greet>...</greet>

Ausgewählte Regel:<xsl:template match="greet"> <h1><xsl:value-of select="."/></h1></xsl:template>

Ausgabe: <html><body> <h1>Guten Tag!</h1>

53

Page 54: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

<xsl:template match="greet"> <h1><xsl:value-of select="."/></h1></xsl:template>

Wurzel-Knoten /

Verarbeitungs-

Anweisung

<?xml ... ?>

Dokument-Element

<greetings>...</greetings>

Guten Tag! Bon Jour!

Sub-Element

<greet>...</greet>

Sub-Element

<greet>...</greet>

Ausgewählte Regel:

Ausgabe: <html><body> <h1>Guten Tag!</h1>

54

Page 55: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

<xsl:template match="greet"> <h1><xsl:value-of select="."/></h1></xsl:template>

Wurzel-Knoten /

Verarbeitungs-

Anweisung

<?xml ... ?>

Dokument-Element

<greetings>...</greetings>

Guten Tag! Bon Jour!

Sub-Element

<greet>...</greet>

Sub-Element

<greet>...</greet>

Ausgewählte Regel:

Ausgabe: <html><body> <h1>Guten Tag!</h1> <h1>Bon Jour!</h1>

55

Page 56: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Wurzel-Knoten /

Verarbeitungs-

Anweisung

<?xml ... ?>

Dokument-Element

<greetings>...</greetings>

Guten Tag! Bon Jour!

Sub-Element

<greet>...</greet>

Sub-Element

<greet>...</greet>

Ausgabe: <html><body> <h1>Guten Tag!</h1> <h1>Bon Jour!</h1>

Keine weiteren Knoten in der Kontext-Knotenliste:Zum vorhergehenden Kontext zurückkehren

56

Page 57: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Ausgewählte Regel:

Wurzel-Knoten /

Verarbeitungs-

Anweisung

<?xml ... ?>

Dokument-Element

<greetings>...</greetings>

Guten Tag! Bon Jour!

Sub-Element

<greet>...</greet>

Sub-Element

<greet>...</greet>

<xsl:template match="/"> <html> <body> <xsl:apply-templates select="greetings/greet"/> </body> </html></xsl:template>

Ausgabe: <html><body> <h1>Guten Tag!</h1> <h1>Bon Jour!</h1>

57

Page 58: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

<xsl:template match="/"> <html> <body> <xsl:apply-templates select="greetings/greet"/> </body> </html></xsl:template>

Ausgewählte Regel:

Wurzel-Knoten /

Verarbeitungs-

Anweisung

<?xml ... ?>

Dokument-Element

<greetings>...</greetings>

Guten Tag! Bon Jour!

Sub-Element

<greet>...</greet>

Sub-Element

<greet>...</greet>

Ausgabe: <html><body> <h1>Guten Tag!</h1> <h1>Bon Jour!</h1> </body></html>

58

Page 59: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Keine weiteren Knoten in der Kontext-Knotenliste: Ende der Transformation

Wurzel-Knoten /

Verarbeitungs-

Anweisung

<?xml ... ?>

Dokument-Element

<greetings>...</greetings>

Guten Tag! Bon Jour!

Sub-Element

<greet>...</greet>

Sub-Element

<greet>...</greet>

Ausgabe: <html><body> <h1>Guten Tag!</h1> <h1>Bon Jour!</h1> </body></html>

59

Page 60: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

<xsl:stylesheetxmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="1.0"><xsl:output method="html"/>

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

<body><xsl:apply-templates select="greetings/greet"/>

</body></html>

</xsl:template>

<xsl:template match="greet"><h1><xsl:value-of select="."/></h1>

</xsl:template>

</xsl:stylesheet>

Zugriff auf das XML-Dokument

Beispiel XSLT-Script

60

Page 61: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

<xsl:stylesheetxmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="1.0"><xsl:output method="html"/>

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

<body><xsl:apply-templates select="greetings/greet"/>

</body></html>

</xsl:template>

<xsl:template match="greet"><h1><xsl:value-of select="."/></h1>

</xsl:template>

</xsl:stylesheet>

Beispiel XSLT-Script

Zugriff auf das XML-Dokument

61

Page 62: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

XPath und XSLT

Bestimmung von Knotenmengen in xsl:apply-templates

Berechnung von Zahlen und Strings in xsl:value-of

Boolesche Bedingungen in xsl:template

62

Page 63: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Ausgabe einer HTML-Tabelle

Wetter in Schleswig-Holstein am 27. 3. 2005

Ort Temperatur Wetterlage

Flensburg 4 °C Regenschauer

Fehmarn 3 °C bedeckt

Heide 9 °C wolkig

Itzehoe 8 °C bedeckt

Kiel 4 °C bedeckt

List auf Sylt 5 °C bedeckt

Lübeck 7 °C bedeckt

Rendsburg 5 °C bedeckt

Schleswig 4 °C Regen

St.Peter 6 °C bedeckt

Durchschnittstemperatur = 5.5 °C

63

Page 64: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Beispiel: Wetterlage<?xml version="1.0" encoding="ISO8859-1" ?>

<wetter datum="2005-03-27" region="Schleswig-Holstein">

<ort name="Flensburg" temp="4">Regenschauer</ort>

<ort name="Fehmarn" temp="3">bedeckt</ort>

<ort name="Heide" temp="9">wolkig</ort>

<ort name="Itzehoe" temp="8">bedeckt</ort>

<ort name="Kiel" temp="4">bedeckt</ort>

<ort name="List auf Sylt" temp="5">bedeckt</ort>

<ort name="Lübeck" temp="7">bedeckt</ort>

<ort name="Rendsburg" temp="5">bedeckt</ort>

<ort name="Schleswig" temp="4">Regen</ort>

<ort name="St.Peter" temp="6">bedeckt</ort>

</wetter>

64

Page 65: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

XSLT-Script

Demo XSLT-Script für HTML-Generierung

65

Page 66: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Ausgabe eines Balkendiagramms (SVG)

66

Page 67: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

XSLT-Script

Demo XSLT-Script für SVG-Generierung

67

Page 68: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

XSLT ist mehrBedingungenErzeugen von PDF, Text, XML, Programmenerweiterte FallunterscheidungenIterieren über KnotenmengenInclude und ImportModesTemplate-Aufruf mit ParameternVariablenRekursionSortieren, AuswählenLinken xsl:id, xsl:keyDokumentenzugriff xsl:documentErweiterungsmöglichkeiten

68

Page 69: XPath, XSLT - xlerb.de · XPath XML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen) abgekürzte

Zusammenfassung

XML trennt Daten und Darstellung

XSLT ist eine regelbasierte Programmiersprache zum Transformieren von XML-Dokumenten

Zum Selektieren von XML-Teilen wird XPath verwendet

69