Krótki przewodnik XSLT
XSL
Zanim nauczysz się XSLT, powinniśmy najpierw zrozumieć XSL, który oznacza EXrozciągliwy Stylesheet Lból. Jest podobny do XML, jak CSS do HTML.
Potrzeba XSL
W przypadku dokumentu HTML, tagi są predefiniowane, takie jak tabela, div i span; a przeglądarka wie, jak dodać do nich styl i wyświetlić te, które używają stylów CSS. Jednak w przypadku dokumentów XML tagi nie są predefiniowane. Aby zrozumieć i nadać styl dokumentowi XML, World Wide Web Consortium (W3C) opracowało XSL, który może działać jako język arkuszy stylów oparty na XML. Dokument XSL określa, w jaki sposób przeglądarka powinna renderować dokument XML.
Oto główne części XSL -
XSLT - służy do przekształcania dokumentu XML w różne inne typy dokumentów.
XPath - służy do nawigacji w dokumencie XML.
XSL-FO - służy do formatowania dokumentu XML.
Co to jest XSLT
XSLT, Extensible Stylesheet Language Transformations, zapewnia możliwość automatycznego przekształcania danych XML z jednego formatu na inny.
Jak działa XSLT
Arkusz stylów XSLT służy do definiowania reguł transformacji, które mają być zastosowane w docelowym dokumencie XML. Arkusz stylów XSLT jest napisany w formacie XML. Procesor XSLT pobiera arkusz stylów XSLT i stosuje reguły transformacji do docelowego dokumentu XML, a następnie generuje sformatowany dokument w formacie XML, HTML lub tekstowym. Ten sformatowany dokument jest następnie używany przez program formatujący XSLT do generowania rzeczywistych danych wyjściowych, które mają być wyświetlane użytkownikowi końcowemu.
Zalety
Oto zalety korzystania z XSLT -
Niezależne od programowania. Transformacje są zapisywane w osobnym pliku xsl, który ponownie jest dokumentem XML.
Dane wyjściowe można zmienić, po prostu modyfikując transformacje w pliku xsl. Nie musisz zmieniać żadnego kodu. Dzięki temu projektanci stron internetowych mogą edytować arkusz stylów i szybko zobaczyć zmiany w wynikach.
Załóżmy, że mamy następujący przykładowy plik XML, Students.xml, który należy przekształcić w dobrze sformatowany dokument HTML.
students.xml
<?xml version = "1.0"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
Musimy zdefiniować dokument arkusza stylów XSLT dla powyższego dokumentu XML, aby spełniał następujące kryteria -
Strona powinna mieć tytuł Students.
Strona powinna zawierać tabelę danych uczniów.
Kolumny powinny mieć następujące nagłówki: Roll No, First Name, Last Name, Nick Name, Marks
Tabela musi zawierać odpowiednie dane uczniów.
Krok 1: Utwórz dokument XSLT
Utwórz dokument XSLT spełniający powyższe wymagania, nazwij go student.xsl i zapisz w tym samym miejscu, w którym znajduje się plik Students.xml.
students.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<!-- xsl stylesheet declaration with xsl namespace:
Namespace tells the xlst processor about which
element is to be processed and which is used for output purpose only
-->
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<!-- xsl template declaration:
template tells the xlst processor about the section of xml
document which is to be formatted. It takes an XPath expression.
In our case, it is matching document root element and will
tell processor to process the entire document with this template.
-->
<xsl:template match = "/">
<!-- HTML tags
Used for formatting purpose. Processor will skip them and browser
will simply render them.
-->
<html>
<body>
<h2>Students</h2>
<table border = "1">
<tr bgcolor = "#9acd32">
<th>Roll No</th>
<th>First Name</th>
<th>Last Name</th>
<th>Nick Name</th>
<th>Marks</th>
</tr>
<!-- for-each processing instruction
Looks for each element matching the XPath expression
-->
<xsl:for-each select="class/student">
<tr>
<td>
<!-- value-of processing instruction
process the value of the element matching the XPath expression
-->
<xsl:value-of select = "@rollno"/>
</td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Krok 2: Połącz dokument XSLT z dokumentem XML
Zaktualizuj dokument student.xml za pomocą następującego znacznika xml-stylesheet. Ustaw wartość atrybutu href na student.xsl
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
...
</class>
Krok 3: Wyświetl dokument XML w przeglądarce Internet Explorer
students.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
Wynik
<xsl: template> określa sposób ponownego wykorzystania szablonów w celu wygenerowania żądanego wyniku dla węzłów określonego typu / kontekstu.
Deklaracja
Poniżej znajduje się deklaracja składni <xsl:template> element.
<xsl:template
name = Qname
match = Pattern
priority = number
mode = QName >
</xsl:template>
Atrybuty
Sr.No | Nazwa i opis |
---|---|
1 | name Nazwa elementu, na którym ma być zastosowany szablon. |
2 | match Wzór oznaczający element (y), na którym ma być zastosowany szablon. |
3 | priority Numer priorytetu szablonu. Dopasowany szablon o niskim priorytecie nie jest uwzględniany przed szablonem o wysokim priorytecie. |
4 | mode Umożliwia wielokrotne przetwarzanie elementu, aby za każdym razem dawać inny wynik. |
Elementy
Liczba wystąpień | Nieograniczony |
---|---|
Parent elements |
xsl: arkusz stylów, xsl: transform |
Child elements |
xsl: Apply-Import, xsl: apply-templates, xsl: attribute, xsl: call-template, xsl: choose, xsl: comment, xsl: copy, xsl: copy-of, xsl: element, xsl: fallback, xsl: for-each, xsl: if, xsl: message, xsl: number, xsl: param, xsl: processing-instructions, xsl: text, xsl: value-of, xsl: variable, output elements |
Przykład demo
Ta reguła szablonu ma wzorzec, który identyfikuje elementy <student> i tworzy dane wyjściowe w formacie tabelarycznym.
students.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
students_imports.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/">
<html>
<body>
<h2>Students</h2>
<table border = "1">
<tr bgcolor = "#9acd32">
<th>Roll No</th>
<th>First Name</th>
<th>Last Name</th>
<th>Nick Name</th>
<th>Marks</th>
</tr>
<xsl:for-each select = "class/student">
<tr>
<td><xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Wynik
Znacznik <xsl: value-of> umieszcza wartość wybranego węzła zgodnie z wyrażeniem XPath jako tekst.
Deklaracja
Poniżej znajduje się deklaracja składni <xsl:value-of> element.
<xsl:value-of
select = Expression
disable-output-escaping = "yes" | "no" >
</xsl:value-of>
Atrybuty
Sr.No | Nazwa i opis |
---|---|
1 | Select Wyrażenie XPath do oceny w bieżącym kontekście. |
2 | disable-outputescaping Domyślnie - „nie”. Jeśli „tak”, tekst wyjściowy nie będzie usuwał znaków XML z tekstu. |
Elementy
Liczba wystąpień | Nieograniczony |
---|---|
Parent elements |
xsl: atrybut, xsl: komentarz, xsl: copy, xsl: element, xsl: fallback, xsl: for-each, xsl: if, xsl: komunikat, xsl: w przeciwnym razie, xsl: param, xsl: instrukcja przetwarzania, xsl: szablon , xsl: zmienna, xsl: kiedy, xsl: with-param, elementy wyjściowe |
Child elements |
Żaden |
Przykład demo
Ten przykład tworzy tabelę elementu <student> z jego atrybutem rollno i jego dziecko <firstname>, <lastname>, <nickname> i <marks>.
students.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
students.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/">
<html>
<body>
<h2>Students</h2>
<table border = "1">
<tr bgcolor = "#9acd32">
<th>Roll No</th>
<th>First Name</th>
<th>Last Name</th>
<th>Nick Name</th>
<th>Marks</th>
</tr>
<xsl:for-each select = "class/student">
<tr>
<td><xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Sprawdź dane wyjściowe
Znacznik <xsl: for-each> wielokrotnie stosuje szablon dla każdego węzła.
Deklaracja
Poniżej znajduje się deklaracja składni <xsl:for-each> element
<xsl:for-each
select = Expression >
</xsl:for-each>
Atrybuty
Sr.No | Nazwa i opis |
---|---|
1 | Select Wyrażenie XPath do oceny w bieżącym kontekście w celu określenia zestawu węzłów do iteracji. |
Elementy
Liczba wystąpień | Nieograniczony |
---|---|
Parent elements |
xsl: atrybut, xsl: komentarz, xsl: copy, xsl: element, xsl: fallback, xsl: foreach, xsl: if, xsl: komunikat, xsl: w przeciwnym razie, xsl: param, xsl: processinginstruction, xsl: template, xsl: zmienna, xsl: kiedy, xsl: with-param, elementy wyjściowe. |
Child elements |
xsl: Apply-Import, xsl: apply-templates, xsl: attribute, xsl: call-template, xsl: choose, xsl: comment, xsl: copy, xsl: copy-of, xsl: element, xsl: fallback, xsl: for-each, xsl: if, xsl: komunikat, xsl: liczba, xsl: instrukcja-przetwarzania, xsl: sort, xsl: tekst, xsl: wartość-of, xsl: zmienna. |
Przykład demo
Ten przykład tworzy tabelę elementu <student> z jego atrybutem rollno i jego potomkiem <firstname> ,<lastname> <nickname> i <marks>, wykonując iterację po każdym uczniu.
students.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
students.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/">
<html>
<body>
<h2>Students</h2>
<table border = "1">
<tr bgcolor = "#9acd32">
<th>Roll No</th>
<th>First Name</th>
<th>Last Name</th>
<th>Nick Name</th>
<th>Marks</th>
</tr>
<xsl:for-each select = "class/student">
<tr>
<td><xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Wynik
Znacznik <xsl: sort> określa kryteria sortowania w węzłach.
Deklaracja
Poniżej znajduje się deklaracja składni <xsl:sort> element.
<xsl:sort
select = string-expression
lang = { nmtoken }
data-type = { "text" | "number" | QName }
order = { "ascending" | "descending" }
case-order = { "upper-first" | "lower-first" } >
</xsl:sort>
Atrybuty
Sr.No | Nazwa i opis |
---|---|
1 | select Klucz sortowania węzła. |
2 | lang Alfabet języka używany do określenia porządku sortowania. |
3 | data-type Typ danych tekstu. |
4 | order Kolejność sortowania. Wartość domyślna to „rosnąco”. |
5 | case-order Porządek sortowania ciągu według wielkości liter. Domyślnie jest to „najpierw górna”. |
Elementy
Number of occurrences | Nieograniczony |
Parent elements | xsl: apply-templates, xsl: for-each |
Child elements | Żaden |
Przykład demo
Ten przykład tworzy tabelę elementu <student> z jego atrybutem rollno a jego dziecko <pierwsze imię>, <ostatnie imię>, <nickname> i <znaki> przez iterację po każdym uczniu, sortując je według imion.
students.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
students.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/">
<html>
<body>
<h2>Students</h2>
<table border = "1">
<tr bgcolor = "#9acd32">
<th>Roll No</th>
<th>First Name</th>
<th>Last Name</th>
<th>Nick Name</th>
<th>Marks</th>
</tr>
<xsl:for-each select = "class/student">
<xsl:sort select = "firstname"/>
<tr>
<td><xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Wynik
Znacznik <xsl: if> określa warunkowy test zawartości węzłów.
Deklaracja
Poniżej znajduje się deklaracja składni <xsl:if> element.
<xsl:if
test = boolean-expression >
</xsl:if>
Atrybuty
Sr.No | Nazwa i opis |
---|---|
1 | test Stan w danych XML do przetestowania. |
Elementy
Liczba wystąpień | Nieograniczony |
---|---|
Parent elements |
xsl: atrybut, xsl: komentarz, xsl: copy, xsl: element, xsl: fallback, xsl: for-each, xsl: if, xsl: message, xsl: w przeciwnym razie, xsl: param, xsl: processing-instructions, xsl: szablon, xsl: zmienna, xsl: kiedy, xsl: with-param, elementy wyjściowe |
Child elements |
xsl: Apply-templates, xsl: attribute, xsl: call-template, xsl: choose, xsl: komentarz, xsl: copy, xsl: copy-of, xsl: element, xsl: for-each, xsl: if, xsl: instrukcja-przetwarzania, xsl: tekst, xsl: wartość-of, xsl: zmienna, elementy wyjściowe |
Przykład demo
Ten przykład tworzy tabelę elementu <student> z jego atrybutem rollnoi jego dziecko <firstname>, <lastname>, <nickname> i <marks> przez iterację po każdym uczniu. Sprawdza, czy znaczniki są większe niż 90, a następnie drukuje dane ucznia (ów).
students.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
students.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/">
<html>
<body>
<h2>Students</h2>
<table border = "1">
<tr bgcolor = "#9acd32">
<th>Roll No</th>
<th>First Name</th>
<th>Last Name</th>
<th>Nick Name</th>
<th>Marks</th>
</tr>
<xsl:for-each select = "class/student">
<xsl:if test = "marks > 90">
<tr>
<td><xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Wynik
Znacznik <xsl: choose> określa wielokrotne testy warunkowe dotyczące zawartości węzłów w połączeniu z elementami <xsl: else> i <xsl: when>.
Deklaracja
Poniżej znajduje się deklaracja składni <xsl:choose> element.
<xsl:choose >
</xsl:choose>
Elementy
Liczba wystąpień | Nieograniczony |
---|---|
Parent elements |
xsl: atrybut, xsl: komentarz, xsl: copy, xsl: element, xsl: fallback, xsl: for-each, xsl: if, xsl: message, xsl: w przeciwnym razie, xsl: param, xsl: processing-instructions, xsl: szablon, xsl: zmienna, xsl: kiedy, xsl: with-param, elementy wyjściowe |
Child elements |
xsl: w przeciwnym razie xsl: when |
Przykład demo
Ten przykład tworzy tabelę elementu <student> z jego atrybutem rollnoi jego dziecko <firstname>, <lastname>, <nickname> i <marks> przez iterację po każdym uczniu. Sprawdza, a następnie drukuje szczegóły oceny.
students.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
students.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/">
<html>
<body>
<h2>Students</h2>
<table border = "1">
<tr bgcolor = "#9acd32">
<th>Roll No</th>
<th>First Name</th>
<th>Last Name</th>
<th>Nick Name</th>
<th>Marks</th>
<th>Grade</th>
</tr>
<xsl:for-each select = "class/student">
<tr>
<td><xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
<td>
<xsl:choose>
<xsl:when test = "marks > 90">
High
</xsl:when>
<xsl:when test = "marks > 85">
Medium
</xsl:when>
<xsl:otherwise>
Low
</xsl:otherwise>
</xsl:choose>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Wynik
Element znacznika <xsl: key> określa nazwaną parę nazwa-wartość przypisaną do określonego elementu w dokumencie XML. Ten klucz jest używany z funkcją key () w wyrażeniach XPath w celu uzyskania dostępu do przypisanych elementów w dokumencie XML.
Deklaracja
Poniżej znajduje się deklaracja składni <xsl:key> element.
<xsl:key
name = QName
match = Pattern
use = Expression >
</xsl:key>
Atrybuty
S.Nr | Nazwa i opis |
---|---|
1 | Name Nazwa klucza, który ma być używany. |
2 | Match Wzorce używane do identyfikowania węzła przechowującego ten klucz. |
3 | Use Wyrażenie XPath w celu określenia wartości węzłów dokumentu xml. |
Elementy
Number of Occurrences | Nieograniczony |
Parent elements | xsl: arkusz stylów |
Child elements | Żaden |
Przykład demo
Ten przykład tworzy tabelę elementu <student> z jego atrybutem rollnoi jego dziecko <firstname>, <lastname>, <nickname> i <marks> przez iterację po każdym uczniu. Sprawdza, czy klucz jest imieniem jednego z uczniów, a następnie drukuje szczegóły ucznia.
students.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
students.xsl
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:key name = "firstname-search" match = "student" use = "firstname"/>
<xsl:template match = "/">
<html>
<body>
<h2>Students</h2>
<table border = "1">
<tr bgcolor = "#9acd32">
<th>Roll No</th>
<th>First Name</th>
<th>Last Name</th>
<th>Nick Name</th>
<th>Marks</th>
</tr>
<xsl:for-each select = "key('firstname-search', 'Dinkar')">
<tr>
<td><xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Wynik
Element tagu <message> pomaga debugować przetwarzanie XSLT. Jest podobny do alertów javascript. Znacznik <xsl:> buforuje komunikat do procesora XSLT, który przerywa przetwarzanie i wysyła komunikat do aplikacji wywołującej w celu wyświetlenia komunikatu o błędzie.
Deklaracja
Poniżej znajduje się deklaracja składni <xsl:message> element.
<xsl:message
terminate = "yes" | "no" >
</xsl:message>
Atrybuty
Sr.No | Nazwa i opis |
---|---|
1 | terminate Określa, czy transformacja powinna zakończyć się po wykonaniu tej instrukcji, czy nie. Wartość domyślna to „tak”. |
Elementy
Liczba wystąpień | Nieograniczony |
---|---|
Parent elements | xsl: atrybut, xsl: komentarz, xsl: copy, xsl: element, xsl: fallback, xsl: foreach, xsl: if, xsl: komunikat, xsl: w przeciwnym razie, xsl: param, xsl: processinginstruction, xsl: template, xsl: zmienna, xsl: kiedy, xsl: with-param, elementy wyjściowe |
Child elements |
xsl: Apply-templates, xsl: attribute, xsl: call-template, xsl: choose, xsl: komentarz, xsl: copy, xsl: copy-of, xsl: element, xsl: for-each, xsl: if, xsl: instrukcja-przetwarzania, xsl: tekst, xsl: wartość-of, xsl: zmienna, elementy wyjściowe |
Przykład demo
Ten przykład tworzy tabelę elementu <student> z jego atrybutem rollnoi jego dziecko <firstname>, <lastname>, <nickname> i <marks> przez iterację po każdym uczniu. Sprawdza, czy klucz jest obecny, a następnie drukuje szczegóły ucznia, w przeciwnym razie wyświetla komunikat o błędzie.
students.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname></firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
students.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/">
<html>
<body>
<h2>Students</h2>
<table border = "1">
<tr bgcolor = "#9acd32">
<th>Roll No</th>
<th>First Name</th>
<th>Last Name</th>
<th>Nick Name</th>
<th>Marks</th>
</tr>
<xsl:for-each select = "class/student">
<xsl:if test = "firstname = ''">
<xsl:message terminate = "yes">A first name field is empty.
</xsl:message>
</xsl:if>
<tr>
<td><xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Wynik
Znacznik <xsl: apply-template> sygnalizuje procesorowi XSLT, aby znalazł odpowiedni szablon do zastosowania, w oparciu o typ i kontekst każdego wybranego węzła.
Deklaracja
Poniżej znajduje się deklaracja składni <xsl:apply-template> element.
<xsl:apply-template
select = Expression
mode = QName >
</xsl:apply-template>
Atrybuty
Sr.No | Nazwa i opis |
---|---|
1 | select Służy do przetwarzania węzłów wybranych przez wyrażenie XPath zamiast przetwarzania wszystkich elementów podrzędnych. |
2 | mode Umożliwia wielokrotne przetwarzanie elementu określonego przez jego nazwy kwalifikowane, za każdym razem dając inny wynik. |
Elementy
Liczba wystąpień | Nieograniczony |
---|---|
Parent elements |
xsl: atrybut, xsl: komentarz, xsl: copy, xsl: element, xsl: fallback, xsl: foreach, xsl: if, xsl: komunikat, xsl: w przeciwnym razie, xsl: param, xsl: processinginstruction, xsl: template, xsl: zmienna, xsl: kiedy, xsl: with-param, elementy wyjściowe |
Child elements |
xsl: sort, xsl: with-param |
Przykład demo
Ten przykład tworzy listę elementu <student> z jego atrybutem rollno i jego dziecko <firstname>, <lastname>, <nickname> i <marks> przez iterację po każdym uczniu.
students.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
students.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/">
<html>
<body>
<h2>Students</h2>
<xsl:apply-templates select = "class/student" />
</body>
</html>
</xsl:template>
<xsl:template match = "class/student">
<xsl:apply-templates select = "@rollno" />
<xsl:apply-templates select = "firstname" />
<xsl:apply-templates select = "lastname" />
<xsl:apply-templates select = "nickname" />
<xsl:apply-templates select = "marks" />
<br />
</xsl:template>
<xsl:template match = "@rollno">
<span style = "font-size = 22px;">
<xsl:value-of select = "." />
</span>
<br />
</xsl:template>
<xsl:template match = "firstname">
First Name:<span style = "color:blue;">
<xsl:value-of select = "." />
</span>
<br />
</xsl:template>
<xsl:template match = "lastname">
Last Name:<span style = "color:green;">
<xsl:value-of select = "." />
</span>
<br />
</xsl:template>
<xsl:template match = "nickname">
Nick Name:<span style = "color:red;">
<xsl:value-of select = "." />
</span>
<br />
</xsl:template>
<xsl:template match = "marks">
Marks:<span style = "color:gray;">
<xsl:value-of select = "." />
</span>
<br />
</xsl:template>
</xsl:stylesheet>
Wynik
Znacznik <xsl: import> importuje zawartość jednego arkusza stylów do drugiego. Importowanie arkusza stylów ma wyższy priorytet niż importowany arkusz stylów.
Deklaracja
Poniżej znajduje się deklaracja składni <xsl:import> element.
<xsl:import href = "uri">
</xsl:import>
Atrybuty
Sr.No | Nazwa i opis |
---|---|
1. | href służy do przekazywania ścieżki arkusza stylów xslt do zaimportowania . |
Elementy
Number of occurrences | Nieograniczony |
Parent elements | xsl: arkusz stylów, xsl: transform |
Child elements | Żaden |
Przykład demo
Ten przykład tworzy listę elementu <student> z jego atrybutem rollnoi jego dziecko <firstname>, <lastname>, <nickname> i <marks> przez iterację po każdym uczniu. W tym miejscu utworzyliśmy dwa arkusze stylów xsl, w których arkusz stylów Students_imports.xsl importuje plik Students.xsl, a plik Students.xml jest powiązany z plikiem Students_imports.xsl.
students.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students_imports.xsl"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
students.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/">
<html>
<body>
<h2>Students</h2>
<table border = "1">
<tr bgcolor = "#9acd32">
<th>Roll No</th>
<th>First Name</th>
<th>Last Name</th>
<th>Nick Name</th>
<th>Marks</th>
</tr>
<xsl:for-each select = "class/student">
<tr>
<td><xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
students_imports.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:import href = "students.xsl"/>
<xsl:template match = "/">
<xsl:apply-imports/>
</xsl:template>
</xsl:stylesheet>