Język XSLT

Transkrypt

Język XSLT
Język XSLT
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
Po zrealizowaniu materiału student będzie w stanie
Dokonać przekształcenia zawartości dokumentu XML do
formatu HTML oraz TXT
Realizować przetwarzanie warunkowe dokumentu XML
Formatować wartości wynikowe
Dokonywać selekcji oraz porządkowania rezultatów
transformacji
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
2
1
W3C
http://www.w3.org/standards/xml/transformation
ZVON – XSLT tutorial
http://www.zvon.org/comp/r/tut-XSLT_1.html#
w języku polskim:
http://zvon.org/xxl/XSLTutorial/Output_pol/contents.html
W3Schools – XSLT tutorial
http://www.w3schools.com/xsl/default.asp
AltovaXML
procesor XML (walidacja oraz transformacja dokumentu XML)
http://www.altova.com/download_components.html
Dowolna przeglądarka internetowa
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
Struktura dokumentu XSLT
Szablony oraz metody ich wywoływania
Porządkowanie informacji wynikowych
Transformacja warunkowa
Modyfikacja dokumentu XML – dodawanie i
usuwanie informacji
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
3
4
2
XSLT
eXtensible Stylesheet Language Transformation
XSL = XSLT + XSL-FO + XPATH
przestrzeń nazw
http://www.w3.org/1999/XSL/Transform
Zastosowanie
przekształcanie dokumentu źródłowego XML
wizualizacja danych
© UEK w Krakowie
5
Janusz Stal & Grażyna Paliwoda-Pękosz
Dokument
XML
Dokument
XSLT
Procesor
XSLT
Dokument
wynikowy
XML, HTML, TXT
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
6
3
Format XML
Zawiera zbiór reguł
transformacji
dokumentu XML
Reguły transformacji
Dokument XSLT
wzorce (XPath)
szablony (fragmenty
dokumentu wynikowego)
© UEK w Krakowie
7
Janusz Stal & Grażyna Paliwoda-Pękosz
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" ... />
<xsl:template match="…">
…
</xsl:template>
Format dokumentu
wynikowego
<xsl:template match="…">
…
</xsl:template>
Reguły (szablony)
transformacji
<xsl:template match="…">
…
</xsl:template>
Wzorzec dopasowania
</xsl:stylesheet>
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
8
4
<apply-templates />
<apply-templates select=”wzorzec” />
Wyznaczenie zbioru węzłów
Dopasowanie szablonu do każdego
węzła ze zbioru
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="sklep.xsl"?>
<sklep>
<towar kod="2213" ilosc="150" jm="szt">
<nazwa>chleb razowy</nazwa>
<cena waluta="pln">1.5</cena>
</towar>
<towar kod="2115" ilosc="21" jm="szt">
<nazwa>margaryna palma</nazwa>
<cena waluta="pln">1.99</cena>
</towar>
<towar kod="2010" ilosc="92" jm="kg">
<nazwa>cukier</nazwa>
<cena waluta="eur">0.7</cena>
</towar>
<towar kod="2520" ilosc="73" jm="szt">
<nazwa>margaryna</nazwa>
<cena waluta="pln">2.45</cena>
</towar>
</sklep>
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
9
Powiązanie
z plikiem
transformacji
10
5
•
Wywoływane, gdy w dokumencie transformacji nie został określony
szablon jawny
węzeł elementu,
<xsl:template match="*|/">
<xsl:apply-templates />
</xsl:template>
węzeł dokumentu
<xsl:template match="@*|text()">
<xsl:value-of select="." />
</xsl:template>
•
Przykład:
węzeł atrybutu,
węzeł tekstowy
pobranie
zawartości
Dokument transformacji XSLT
<?xml version="1.0"?>
<xsl:stylesheet version="1.0”
xmlns:xsl=http://www.w3.org/1999/XSL/Transform>
</xsl:stylesheet>
Efekt końcowy w przeglądarce
chleb razowy 1.5 margaryna palma 1.99 cukier 0.7 margaryna 2.45
© UEK w Krakowie
11
Janusz Stal & Grażyna Paliwoda-Pękosz
Dokument transformacji XSLT
<xsl:stylesheet>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
Dokument wynikowy HTML
<html>
<body>
chleb razowy<br/>
margaryna palma<br/>
cukier<br/>
margaryna<br/>
</body>
</html>
<xsl:template match="towar">
<xsl:apply-templates select="nazwa"/>
</xsl:template>
<xsl:template match="nazwa">
<xsl:value-of select="."/><br/>
</xsl:template>
</xsl:stylesheet>
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
Efekt końcowy w przeglądarce
chleb razowy
margaryna palma
cukier
margaryna
12
6
Dokument transformacji XSLT
<xsl:stylesheet>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="towar">
<xsl:apply-templates select="nazwa"/>
</xsl:template>
KaŜda transformacja rozpoczyna się
zawsze od wykonania zawartości
szablonu dla węzła głównego (/).
Czy istnieje szablon pasujący do
węzła głównego?
Tak. Zatem jego zawartość zostanie
wykonana.
<xsl:template match="nazwa">
<xsl:value-of select="."/><br/>
</xsl:template>
</xsl:stylesheet>
© UEK w Krakowie
13
Janusz Stal & Grażyna Paliwoda-Pękosz
Dokument transformacji XSLT
<xsl:stylesheet>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="towar">
<xsl:apply-templates select="nazwa"/>
</xsl:template>
<xsl:template match="nazwa">
<xsl:value-of select="."/><br/>
</xsl:template>
</xsl:stylesheet>
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
Elementy szablonu, które nie naleŜą
do przestrzeni nazw schematu (nie
posiadają prefiksu xsl) zostają
skierowane do dokumentu
wynikowego w postaci niezmienionej.
Dokument wynikowy HTML
<html>
<body>
...
</body>
</html>
14
7
Dokument transformacji XSLT
<xsl:stylesheet>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="towar">
<xsl:apply-templates select="nazwa"/>
</xsl:template>
<xsl:template match="nazwa">
<xsl:value-of select="."/><br/>
</xsl:template>
</xsl:stylesheet>
© UEK w Krakowie
Natomiast elementy szablonu, które
naleŜą do przestrzeni nazw schematu
(posiadają prefiks xsl) stanowią
instrukcje transformacji i są
wykonywane przez procesor.
Dokument wynikowy HTML
<html>
<body>
...
</body>
</html>
15
Janusz Stal & Grażyna Paliwoda-Pękosz
Dokument transformacji XSLT
<xsl:stylesheet>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="towar">
<xsl:apply-templates select="nazwa"/>
</xsl:template>
<xsl:template match="nazwa">
<xsl:value-of select="."/><br/>
</xsl:template>
</xsl:stylesheet>
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
Instrukcja apply-templates:
1. Wyznacza wszystkie węzły
dzieci (child) dla węzła
kontekstowego (w tym wypadku
węzłem kontekstowym jest /, a węzły
dzieci to sklep)
2. Dla kaŜdego wyznaczonego węzła
odszukuje i wykonuje szablon.
Dokument wynikowy HTML
<html>
<body>
...
</body>
</html>
16
8
Dokument transformacji XSLT
<xsl:stylesheet>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="towar">
<xsl:apply-templates select="nazwa"/>
</xsl:template>
<xsl:template match="nazwa">
<xsl:value-of select="."/><br/>
</xsl:template>
</xsl:stylesheet>
© UEK w Krakowie
Czy istnieje szablon pasujący do
węzła sklep?
Nie. Zatem zostanie wykonany
szablon domyślny.
<xsl:template match="*|/">
<xsl:apply-templates />
</xsl:template>
Dokument wynikowy HTML
<html>
<body>
...
</body>
</html>
17
Janusz Stal & Grażyna Paliwoda-Pękosz
Dokument transformacji XSLT
<xsl:stylesheet>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="towar">
<xsl:apply-templates select="nazwa"/>
</xsl:template>
<xsl:template match="nazwa">
<xsl:value-of select="."/><br/>
</xsl:template>
</xsl:stylesheet>
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
Zawartością szablonu domyślnego
jest instrukcja apply-templates,
która wyznaczy węzły dzieci dla węzła
kontekstowego (sklep) i dopasuje dla
nich szablony.
<xsl:template match="*|/">
<xsl:apply-templates />
</xsl:template>
Dokument wynikowy HTML
<html>
<body>
...
</body>
</html>
18
9
Dokument transformacji XSLT
<xsl:stylesheet>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="towar">
<xsl:apply-templates select="nazwa"/>
</xsl:template>
<xsl:template match="nazwa">
<xsl:value-of select="."/><br/>
</xsl:template>
</xsl:stylesheet>
© UEK w Krakowie
Dla węzła sklep istnieją 4 węzły
dzieci o nazwach towar.
Czy istnieje szablon pasujący do
węzła towar?
Tak. Zatem jego zawartość zostanie
wykonana (czterokrotnie, dla kaŜdego
węzła towar)
Dokument wynikowy HTML
<html>
<body>
...
</body>
</html>
19
Janusz Stal & Grażyna Paliwoda-Pękosz
Dokument transformacji XSLT
<xsl:stylesheet>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="towar">
<xsl:apply-templates select="nazwa"/>
</xsl:template>
<xsl:template match="nazwa">
<xsl:value-of select="."/><br/>
</xsl:template>
</xsl:stylesheet>
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
Wykonanie szablonu dla pierwszego
węzła towar spowoduje wykonanie
instrukcji apply-templates zawartej
w tym szablonie. Instrukcja ta nie
wskazuje na wszystkie dzieci węzła
kontekstowego (towar), ale na węzły
dzieci o konkretnej nazwie (nazwa).
Tylko dla takich węzłów zostanie
dopasowany szablon.
Dokument wynikowy HTML
<html>
<body>
...
</body>
</html>
20
10
Dokument transformacji XSLT
<xsl:stylesheet>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="towar">
<xsl:apply-templates select="nazwa"/>
</xsl:template>
<xsl:template match="nazwa">
<xsl:value-of select="."/><br/>
</xsl:template>
</xsl:stylesheet>
© UEK w Krakowie
Szablon zawiera instrukcję value-of
zwracającą wartość węzła. Wartość ta
jest skierowana do pliku wynikowego.
Zwróć uwagę na element <br/>.
PoniewaŜ nie posiada on prefiksu xsl,
zostanie on równieŜ skierowany do
dokumentu wynikowego.
Dokument wynikowy HTML
<html>
<body>
chleb razowy<br/>
</body>
</html>
21
Janusz Stal & Grażyna Paliwoda-Pękosz
Dokument transformacji XSLT
<xsl:stylesheet>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="towar">
<xsl:apply-templates select="nazwa"/>
</xsl:template>
<xsl:template match="nazwa">
<xsl:value-of select="."/><br/>
</xsl:template>
</xsl:stylesheet>
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
Wykonanie szablonu dla pozostałych
trzech węzłów towar przebiega
identycznie, jak zostało to opisane.
Rezultatem są kolejne trzy linie w
pliku wynikowym.
Dokument wynikowy HTML
<html>
<body>
chleb razowy<br/>
cukier<br/>
margaryna<br/>
margaryna palma<br/>
</body>
</html>
22
11
Dokument transformacji XSLT
Dokument wynikowy HTML
<xsl:stylesheet>
<html>
<body>
chleb razowy<br/>
cukier<br/>
margaryna<br/>
margaryna palma<br/>
</body>
</html>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates select="//nazwa">
</xsl:apply-templates>
</body>
</html>
</xsl:template>
<xsl:template match="nazwa">
<xsl:value-of select="."/><br/>
</xsl:template>
</xsl:stylesheet>
© UEK w Krakowie
Efekt końcowy w przeglądarce
chleb razowy
cukier
margaryna
margaryna palma
23
Janusz Stal & Grażyna Paliwoda-Pękosz
Dokument transformacji XSLT
Dokument wynikowy HTML
<xsl:stylesheet>
<html>
<body>
chleb razowy<br/>
cukier<br/>
margaryna<br/>
margaryna palma<br/>
</body>
</html>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates select="//nazwa">
<xsl:sort order="ascending"
data-type="text"/>
</xsl:apply-templates>
</body>
</html>
</xsl:template>
<xsl:template match="nazwa">
<xsl:value-of select="."/><br/>
</xsl:template>
</xsl:stylesheet>
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
Efekt końcowy w przeglądarce
chleb razowy
cukier
margaryna
margaryna palma
24
12
Dokument transformacji XSLT
Dokument wynikowy HTML
<xsl:stylesheet>
<html>
<body>
1. chleb razowy<br/>
2. margaryna palma<br/>
3. cukier<br/>
4. margaryna<br/>
</body>
</html>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates select="//nazwa"/>
</body>
</html>
</xsl:template>
<xsl:template match="nazwa">
<xsl:number count="towar" format="1. "/>
<xsl:value-of select="."/><br/>
</xsl:template>
</xsl:stylesheet>
© UEK w Krakowie
Efekt końcowy w przeglądarce
1.
2.
3.
4.
chleb razowy
margaryna palma
cukier
margaryna
25
Janusz Stal & Grażyna Paliwoda-Pękosz
Dokument transformacji XSLT
Dokument wynikowy HTML
<xsl:stylesheet>
<html>
<body>
chleb razowy<br/>
margaryna palma<br/>
margaryna<br/>
</body>
</html>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates select="//nazwa"/>
</body>
</html>
</xsl:template>
<xsl:template match="nazwa">
<xsl:if test="../cena/@waluta!='eur'">
<xsl:value-of select="."/><br/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
Efekt końcowy w przeglądarce
chleb razowy
margaryna palma
margaryna
26
13
Dokument transformacji XSLT
Dokument wynikowy HTML
<xsl:stylesheet>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates select="//nazwa"/>
</body>
</html>
</xsl:template>
<xsl:template match="nazwa">
<xsl:choose>
<xsl:when test="../cena/@waluta='eur'">
<b><xsl:value-of select="."/></b>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
<br/>
</xsl:template>
</xsl:stylesheet>
<html>
<body>
chleb razowy<br/>
margaryna palma<br/>
<b>cukier</b><br/>
margaryna<br/>
</body>
</html>
© UEK w Krakowie
Efekt końcowy w przeglądarce
chleb razowy
margaryna palma
cukier
margaryna
27
Janusz Stal & Grażyna Paliwoda-Pękosz
Dokument transformacji XSLT
Dokument wynikowy HTML
<xsl:stylesheet>
<html>
<body>
chleb razowy<br/>
margaryna palma<br/>
cukier<br/>
margaryna<br/>
</body>
</html>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates select="//nazwa"/>
</body>
</html>
</xsl:template>
<xsl:template match="nazwa">
<xsl:value-of select="."/>
<xsl:call-template name="KoniecLinii"/>
</xsl:template>
<xsl:template name="KoniecLinii">
<br/>
</xsl:template>
</xsl:stylesheet>
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
Efekt końcowy w przeglądarce
chleb razowy
margaryna palma
cukier
margaryna
28
14
Dokument transformacji XSLT
Dokument wynikowy HTML
<xsl:stylesheet>
<html>
<body>
chleb razowy<br/>
margaryna palma<br/>
cukier<br/>
margaryna<br/>
</body>
</html>
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="//nazwa">
<xsl:value-of select="."/>
<br/>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Efekt końcowy w przeglądarce
chleb razowy
cukier
margaryna
margaryna palma
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
29
Przypisanie nazwy dla wzorca dopasowania
<xsl:variable name="nazwaTowaru" select="//nazwa"/>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates select="$nazwaTowaru">
</xsl:apply-templates>
</body>
</html>
</xsl:template>
<xsl:template match="nazwa">
<xsl:value-of select="."/><br/>
</xsl:template>
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
30
15
Dokument transformacji XSLT
Dokument wynikowy HTML
<xsl:variable name="liczbaTowarow">
<xsl:value-of select="count(//towar)"/>
</xsl:variable>
<html>
<body>
1/4 cukier<br/>
2/4 chleb razowy<br/>
3/4 margaryna<br/>
4/4 margaryna palma<br/>
</body>
</html>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates select="//nazwa">
="//nazwa">
<xsl:sort order="ascending"
data-type="text"/>
</xsl:apply-templates>
</body>
</html>
</xsl:template>
<xsl:template match="nazwa">
<xsl:value-of select="position()"/>
<xsl:text>/</xsl:text>
<xsl:value-of select="$liczbaTowarow"/>
<xsl:text> </xsl:text>
<xsl:value-of select="."/><br/>
</xsl:template>
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
Efekt końcowy w przeglądarce
1/4
2/4
3/4
4/4
cukier
chleb razowy
margaryna
margaryna palma
Źródło: opracowanie na podstawie
http://zvon.org/xxl/XSLTutorial/Output_pol/
example33_ch9.html
31
Wywołanie szablonu dla zmiennych wartości
wywołanie szablonu
<xsl:template match="/">
z parametrem
<html>
WALUTA = ‘pln’
<body>
<xsl:apply-templates select="//nazwa">
<xsl:with-param name="WALUTA" select="‘pln'"/>
</xsl:apply-templates>
</body>
definicja parametru
</html>
wartość domyślna:
</xsl:template>
‘eur’
<xsl:template match="nazwa">
<xsl:param name="WALUTA" select="'eur'"/>
<xsl:value-of select="text()[../../cena/@waluta=$WALUTA]"/><br/>
</xsl:template>
chleb razowy
margaryna
margaryna palma
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
32
16
Wywołanie szablonu z wartością domyślną parametru
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates select="//nazwa">
</xsl:apply-templates>
</body>
</html>
</xsl:template>
<xsl:template match="nazwa">
<xsl:param name="WALUTA" select="'eur'"/>
<xsl:value-of select="text()[../../cena/@waluta=$WALUTA]"/><br/>
</xsl:template>
cukier
© UEK w Krakowie
33
Janusz Stal & Grażyna Paliwoda-Pękosz
Określanie separatora dziesiętnego
Określanie liczby miejsc dziesiętnych
<xsl:decimal-format/>
<xsl:decimal-format decimal-separator="," />
format-number()
<xsl:value-of select="format-number(., '#.00')"/>
Przykład:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:decimal-format name="pln" decimal-separator="." grouping-separator=","/>
<xsl:template match="/">
<xsl:value-of select="format-number(26825.8, '#,###.00 zł', 'pln')"/>
</xsl:template>
</xsl:stylesheet>
Oprac. na podstawie: http://www.w3schools.com/xsl/el_decimal-format.asp
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
26,825.80 zł
34
17
Tworzenie struktury
<xsl:element>
<xsl:attribute>
<xsl:comment>
<xsl:processing-instruction>
<xsl:attribute-set>
Kopiowanie struktury
<xsl:copy>
<xsl:copy-of>
Usuwanie elementów
i/lub atrybutów
Zastosowanie szablonu
pustego
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
35
Kopiowanie struktury dokumentu z wykorzystaniem
elementu COPY-OF
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<xsl:copy-of select="*" />
</xsl:template>
</xsl:stylesheet>
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
36
18
Kopiowanie struktury dokumentu z wykorzystaniem
elementu COPY
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
37
Uzupełnianie
struktury
dokumentu
XML o nowe
informacje
<xsl:template match="towar">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:attribute name="gatunek">1</xsl:attribute>
<xsl:element name="producent">Polmark SA</xsl:element>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
38
19
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
Usunięcie
informacji
dotyczącej
ceny z
dokumentu
XML
<xsl:template match="cena"/>
</xsl:stylesheet>
© UEK w Krakowie
Janusz Stal & Grażyna Paliwoda-Pękosz
39
20