Summary of XSLT and XPath for XML Transformation
XSLT and XPath for XML Transformation: A Student Guide
Úvod
XSLT (Extensible Stylesheet Language Transformations) je jazyk pro převod XML dokumentů do jiných formátů (např. HTML, text, jiné XML). Cílem této učební pomůcky je vysvětlit základní konstrukce XSLT, designové přístupy a praktické použití tak, aby student pochopil, jak strukturovat šablony a řídit výstup transformace.
Definice: XSLT je deklarativní jazyk postavený nad XML pro transformaci zdrojového XML do cílového dokumentu pomocí šablon a pravidel.
Základní koncepty a struktura stylesheetu
Hlavní elementy
- xsl:stylesheet / xsl:transform: kořenový element XSLT stylu s deklarací namespace: xmlns:xsl="http://www.w3.org/1999/XSL/Transform".
- <xsl:template match="...">: definuje šablonu pro uzly, které odpovídají vzoru match.
- <xsl:value-of select="...">: vloží textovou hodnotu vybraného uzlu nebo výrazu.
- <xsl:for-each select="...">: iteruje přes množinu uzlů.
- <xsl:sort select="..." [order="ascending|descending"]>: určuje pořadí během for-each.
- <xsl:if test="..."> a xsl:choose / xsl:when / xsl:otherwise: podmínky (jednoduché a vícenásobné větvení).
- xsl:include / xsl:import: skládání stylů; import má nižší prioritu než include.
- <xsl:variable name="..." select="...">: deklaruje neměnnou proměnnou.
- xsl:text: vloží přesný text do výstupu (včetně whitespace).
Definice: Šablona (template) je blok pravidel, který říká, jak má vypadat výstup pro konkrétní uzel nebo sadu uzlů.
Ukázka jednoduché šablony
Příklad: výpis jména a atributu id z cesty university/student
<xsl:template match="/"> <xsl:value-of select="university/student/name"/> <xsl:value-of select="university/student/@id"/> </xsl:template>
A pokud chceme zpracovat každého studenta:
<xsl:for-each select="university/student"> <xsl:value-of select="name"/> <xsl:value-of select="@id"/> </xsl:for-each>
Iterace a třídění
- Použijte <xsl:for-each select="..."> k iteraci přes uzly.
- Uvnitř for-each lze použít <xsl:sort select="..." order="ascending|descending"/> pro řazení.
Příklad třídění podle věku v sestupném pořadí:
<xsl:for-each select="university/student"> <xsl:sort select="age" order="descending"/> <xsl:value-of select="name"/> <xsl:value-of select="@id"/> </xsl:for-each>
Definice: xsl:sort určuje pořadí uzlů během zpracování kolekce v rámci for-each.
Podmínky: if vs. choose
- <xsl:if test="..."> je jednoduché větvení pro jedinou podmínku.
- xsl:choose s xsl:when a xsl:otherwise je analogií k if-else-if, vhodné pro více větví.
Příklad použití choose:
<xsl:for-each select="university/student"> xsl:choose <xsl:when test="age > 20"> <xsl:value-of select="name"/> <xsl:value-of select="@id"/> </xsl:when> xsl:otherwise <xsl:value-of select="@id"/> </xsl:otherwise> </xsl:choose> </xsl:for-each>
Rozdíl mezi filtrem v select a if
Použití filtru přímo v select (např. university/student[age=23]) omezuje množinu iterovaných uzlů již při výběru. To bývá efektivnější než iterovat všechny uzly a filtrovat uvnitř pomocí xsl:if.
Tabulka: Filtr v select vs xsl:if
| Kritérium | Filtr v select (student[...]) | xsl:if uvnitř for-each |
|---|---|---|
| Kdy se filtrace provede | Při výběru uzlů | Během zpracování každého uzlu |
| Výkon | Často lepší pro velké sady | Méně efektivní, zpracuje se více uzlů |
| Čitelnost | Jasné a stručné | Může být přehledné pro složitější logiku |
Vkládání vlastního výstupu (HTML, text)
Šablony mohou obsahovat libovolný text nebo HTML strukturu; XSLT vloží hodnoty z XML tam, kde je potřebujete.
Příklad: vložit vlastní text a HTML prvky
<xsl:template match="/">
<html> <body> <h1>Seznam studentů</h1> <xsl:for-each select="university/student"> <div class="student"> <span class="name"><xsl:value-of select="name"/></span> <span class="id"><xsl:value-of select="@id"/></span> </div> </xsl:for-each> </body>Already have an account? Sign in
XML transformace (XSLT)
Klíčové pojmy: XSLT používá šablony <xsl:template> pro mapování uzlů, <xsl:value-of select="..."/> získá textovou hodnotu uzlu nebo atributu, Iterace se provádí pomocí <xsl:for-each select="...">, <xsl:sort select="..." order="ascending|descending"/> řadí uzly v rámci for-each, Použijte filtr v select (např. student[age=23]) pro efektivní výběr uzlů, <xsl:choose>/<xsl:when>/<xsl:otherwise> nahrazuje vícerozměrné podmínky, <xsl:output method="xml|html|text"/> určuje formát a kódování výstupu, <xsl:variable> deklaruje neměnnou proměnnou pro opakované použití hodnoty, Fill-in-blank je vhodný pro pevně strukturovaný výstup (HTML), Computational stylesheets používají rekurzi a agregaci pro netriviální převody, Používejte <xsl:text> pro přesný zápis textu a whitespace, Pro tiskové PDF lze použít XSL-FO nebo CSS Paged Media