Краткое руководство по XSLT
XSL
Прежде чем изучать XSLT, мы должны сначала понять XSL, что означает EXрастяжимый Sтаблица Lболь. Он похож на XML, как CSS на HTML.
Потребность в XSL
В случае HTML-документа теги предопределены, например table, div и span; и браузер знает, как добавить к ним стиль и отобразить те, которые используют стили CSS. Но в случае XML-документов теги не определены заранее. Чтобы понять и стилизовать XML-документ, Консорциум World Wide Web (W3C) разработал XSL, который может действовать как язык таблиц стилей на основе XML. Документ XSL определяет, как браузер должен отображать документ XML.
Ниже приведены основные части XSL -
XSLT - используется для преобразования XML-документа в различные другие типы документов.
XPath - используется для навигации по XML-документу.
XSL-FO - используется для форматирования XML-документа.
Что такое XSLT
XSLT, Extensible Stylesheet Language Transformations, предоставляет возможность автоматически преобразовывать XML-данные из одного формата в другой.
Как работает XSLT
Таблица стилей XSLT используется для определения правил преобразования, которые будут применяться к целевому XML-документу. Таблица стилей XSLT написана в формате XML. XSLT Processor берет таблицу стилей XSLT и применяет правила преобразования к целевому XML-документу, а затем создает отформатированный документ в форме XML, HTML или текстового формата. Этот форматированный документ затем используется программой форматирования XSLT для генерации фактического вывода, который должен отображаться конечному пользователю.
![](https://post.nghiatu.com/assets/tutorial/xslt/images/xlst_working.jpg)
Преимущества
Вот преимущества использования XSLT -
Независимо от программирования. Преобразования записываются в отдельный файл xsl, который также является XML-документом.
Вывод можно изменить, просто изменив преобразования в файле xsl. Нет необходимости менять какой-либо код. Таким образом, веб-дизайнеры могут редактировать таблицу стилей и быстро видеть изменения в выводе.
Предположим, у нас есть следующий образец XML-файла, student.xml, который необходимо преобразовать в хорошо отформатированный 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>
Нам необходимо определить документ таблицы стилей XSLT для указанного выше XML-документа, чтобы он соответствовал следующим критериям:
Страница должна иметь заголовок Students.
На странице должна быть таблица с данными о студентах.
Столбцы должны иметь следующие заголовки: Номер ролика, Имя, Фамилия, Ник, Отметки.
Таблица должна содержать данные об учениках соответственно.
Шаг 1. Создайте XSLT-документ
Создайте документ XSLT в соответствии с указанными выше требованиями, назовите его student.xsl и сохраните его в том же месте, где находится student.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>
Шаг 2. Свяжите документ XSLT с документом XML
Обновите документ student.xml с помощью следующего тега xml-stylesheet. Установите значение href для student.xsl
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
...
</class>
Шаг 3. Просмотрите XML-документ в 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>
Вывод
![](https://post.nghiatu.com/assets/tutorial/xslt/images/xlst_students.jpg)
<xsl: template> определяет способ повторного использования шаблонов для генерации желаемого вывода для узлов определенного типа / контекста.
Декларация
Ниже приводится объявление синтаксиса <xsl:template> элемент.
<xsl:template
name = Qname
match = Pattern
priority = number
mode = QName >
</xsl:template>
Атрибуты
Старший Нет | Имя и описание |
---|---|
1 | name Имя элемента, к которому будет применен шаблон. |
2 | match Шаблон, обозначающий элемент (ы), к которому должен применяться шаблон. |
3 | priority Приоритетный номер шаблона. Соответствующий шаблон с низким приоритетом не учитывается перед шаблоном с высоким приоритетом. |
4 | mode Позволяет обрабатывать элемент несколько раз для получения каждый раз другого результата. |
Элементы
Количество вхождений | Безлимитный |
---|---|
Parent elements |
xsl: таблица стилей, xsl: преобразование |
Child elements |
xsl: apply-imports, 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 -struction, xsl: text, xsl: value-of, xsl: variable, output elements |
Демо-пример
Это правило шаблона имеет шаблон, который идентифицирует элементы <student> и производит вывод в табличном формате.
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>
Вывод
![](https://post.nghiatu.com/assets/tutorial/xslt/images/xlst_students.jpg)
Тег <xsl: value-of> помещает значение выбранного узла в соответствии с выражением XPath в виде текста.
Декларация
Ниже приводится объявление синтаксиса <xsl:value-of> элемент.
<xsl:value-of
select = Expression
disable-output-escaping = "yes" | "no" >
</xsl:value-of>
Атрибуты
Старший Нет | Имя и описание |
---|---|
1 | Select Выражение XPath для оценки в текущем контексте. |
2 | disable-outputescaping По умолчанию - «нет». Если «да», выходной текст не будет экранировать символы xml из текста. |
Элементы
Количество вхождений | Безлимитный |
---|---|
Parent elements |
xsl: attribute, xsl: comment, xsl: copy, xsl: element, xsl: fallback, xsl: for-each, xsl: if, xsl: message, xsl: в противном случае, xsl: param, xsl: инструкция по обработке, xsl: template , xsl: variable, xsl: when, xsl: with-param, output elements |
Child elements |
Никто |
Демо-пример
В этом примере создается таблица элемента <student> с его атрибутом rollno и его дочерние элементы <имя>, <имя>, <имя> и <метки>.
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>
Проверьте вывод
![](https://post.nghiatu.com/assets/tutorial/xslt/images/xlst_students.jpg)
Тег <xsl: for-each> многократно применяет шаблон для каждого узла.
Декларация
Ниже приводится объявление синтаксиса <xsl:for-each> элемент
<xsl:for-each
select = Expression >
</xsl:for-each>
Атрибуты
Старший Нет | Имя и описание |
---|---|
1 | Select Выражение XPath, которое необходимо оценить в текущем контексте, чтобы определить набор узлов, которые нужно повторить. |
Элементы
Количество вхождений | Безлимитный |
---|---|
Parent elements |
xsl: attribute, xsl: comment, xsl: copy, xsl: element, xsl: fallback, xsl: foreach, xsl: if, xsl: message, xsl: в противном случае, xsl: param, xsl: processinginstruction, xsl: template, xsl: переменная, xsl: when, xsl: with-param, выходные элементы. |
Child elements |
xsl: apply-imports, 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: processing -struction, xsl: sort, xsl: text, xsl: value-of, xsl: variable. |
Демо-пример
В этом примере создается таблица элемента <student> с его атрибутом rollno и его дочерними элементами <firstname> ,<lastname> <nickname> и <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>
Вывод
![](https://post.nghiatu.com/assets/tutorial/xslt/images/xlst_students.jpg)
Тег <xsl: sort> определяет критерии сортировки узлов.
Декларация
Ниже приводится объявление синтаксиса <xsl:sort> элемент.
<xsl:sort
select = string-expression
lang = { nmtoken }
data-type = { "text" | "number" | QName }
order = { "ascending" | "descending" }
case-order = { "upper-first" | "lower-first" } >
</xsl:sort>
Атрибуты
Старший Нет | Имя и описание |
---|---|
1 | select Ключ сортировки узла. |
2 | lang Языковой алфавит, используемый для определения порядка сортировки. |
3 | data-type Тип данных текста. |
4 | order Порядок сортировки. По умолчанию "по возрастанию". |
5 | case-order Порядок сортировки строки по заглавным буквам. По умолчанию "сначала вверху". |
Элементы
Number of occurrences | Безлимитный |
Parent elements | xsl: применить шаблоны, xsl: для каждого |
Child elements | Никто |
Демо-пример
В этом примере создается таблица элемента <student> с его атрибутом rollno и его дочерние элементы <имя>, <имя>, <имя> и <метки> путем итерации по каждому учащемуся, сортируя их по имени.
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>
Вывод
![](https://post.nghiatu.com/assets/tutorial/xslt/images/xlst_students_sorted.jpg)
Тег <xsl: if> определяет условную проверку содержимого узлов.
Декларация
Ниже приводится объявление синтаксиса <xsl:if> элемент.
<xsl:if
test = boolean-expression >
</xsl:if>
Атрибуты
Старший Нет | Имя и описание |
---|---|
1 | test Условие в XML-данных для проверки. |
Элементы
Количество вхождений | Безлимитный |
---|---|
Parent elements |
xsl: attribute, xsl: comment, xsl: copy, xsl: element, xsl: fallback, xsl: for-each, xsl: if, xsl: message, xsl: else, xsl: param, xsl: processing -struction, xsl: шаблон, xsl: variable, xsl: when, xsl: with-param, выходные элементы |
Child elements |
xsl: apply-templates, xsl: attribute, xsl: call-template, xsl: choose, xsl: comment, xsl: copy, xsl: copy-of, xsl: element, xsl: for-each, xsl: if, xsl: инструкция-обработка, xsl: text, xsl: value-of, xsl: variable, output elements |
Демо-пример
В этом примере создается таблица элемента <student> с его атрибутом rollnoи его дочерние элементы <имя>, <имя>, <имя> и <метки> путем перебора каждого учащегося. Он проверяет, чтобы оценки были больше 90, а затем распечатывает данные об учениках.
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>
Вывод
![](https://post.nghiatu.com/assets/tutorial/xslt/images/xlst_students_if.jpg)
Тег <xsl: choose> определяет несколько условных тестов содержимого узлов в сочетании с элементами <xsl: else> и <xsl: when>.
Декларация
Ниже приводится объявление синтаксиса <xsl:choose> элемент.
<xsl:choose >
</xsl:choose>
Элементы
Количество вхождений | Безлимитный |
---|---|
Parent elements |
xsl: attribute, xsl: comment, xsl: copy, xsl: element, xsl: fallback, xsl: for-each, xsl: if, xsl: message, xsl: else, xsl: param, xsl: processing -struction, xsl: шаблон, xsl: variable, xsl: when, xsl: with-param, выходные элементы |
Child elements |
xsl: иначе, xsl: когда |
Демо-пример
В этом примере создается таблица элемента <student> с его атрибутом rollnoи его дочерние элементы <имя>, <имя>, <имя> и <метки> путем перебора каждого учащегося. Он проверяет, а затем распечатывает сведения об оценке.
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>
Вывод
![](https://post.nghiatu.com/assets/tutorial/xslt/images/xlst_students_choose.jpg)
Элемент тега <xsl: key> определяет именованную пару «имя-значение», назначенную конкретному элементу в XML-документе. Этот ключ используется с функцией key () в выражениях XPath для доступа к назначенным элементам в XML-документе.
Декларация
Ниже приводится объявление синтаксиса <xsl:key> элемент.
<xsl:key
name = QName
match = Pattern
use = Expression >
</xsl:key>
Атрибуты
S.No | Имя и описание |
---|---|
1 | Name Имя ключа, который будет использоваться. |
2 | Match Шаблоны, используемые для идентификации узла, содержащего этот ключ. |
3 | Use Выражение XPath для определения значения узлов XML-документа. |
Элементы
Number of Occurrences | Безлимитный |
Parent elements | xsl: таблица стилей |
Child elements | Никто |
Демо-пример
В этом примере создается таблица элемента <student> с его атрибутом rollnoи его дочерние элементы <имя>, <имя>, <имя> и <метки> путем перебора каждого учащегося. Он проверяет ключ как имя на одно из имени ученика, а затем печатает данные ученика.
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>
Вывод
![](https://post.nghiatu.com/assets/tutorial/xslt/images/xlst_students_key.jpg)
Элемент тега <message> помогает отлаживать обработку XSLT. Это похоже на оповещения javascript. Тег <xsl:> буферизует сообщение в XSLT-процессор, который прекращает обработку и отправляет сообщение вызывающему приложению для отображения сообщения об ошибке.
Декларация
Ниже приводится объявление синтаксиса <xsl:message> элемент.
<xsl:message
terminate = "yes" | "no" >
</xsl:message>
Атрибуты
Старший Нет | Имя и описание |
---|---|
1 | terminate Он указывает, должно ли преобразование завершаться после выполнения этой инструкции или нет. По умолчанию «да». |
Элементы
Количество вхождений | Безлимитный |
---|---|
Parent elements | xsl: attribute, xsl: comment, xsl: copy, xsl: element, xsl: fallback, xsl: foreach, xsl: if, xsl: message, xsl: в противном случае, xsl: param, xsl: processinginstruction, xsl: template, xsl: переменная, xsl: when, xsl: with-param, выходные элементы |
Child elements |
xsl: apply-templates, xsl: attribute, xsl: call-template, xsl: choose, xsl: comment, xsl: copy, xsl: copy-of, xsl: element, xsl: for-each, xsl: if, xsl: инструкция-обработка, xsl: text, xsl: value-of, xsl: variable, output elements |
Демо-пример
В этом примере создается таблица элемента <student> с его атрибутом rollnoи его дочерние элементы <имя>, <имя>, <имя> и <метки> путем перебора каждого учащегося. Он проверяет наличие ключа как имени и затем распечатывает сведения о студенте, в противном случае отображает сообщение об ошибке.
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>
Вывод
![](https://post.nghiatu.com/assets/tutorial/xslt/images/xlst_students_message.jpg)
Тег <xsl: apply-template> сигнализирует процессору XSLT о том, что нужно найти подходящий шаблон для применения в зависимости от типа и контекста каждого выбранного узла.
Декларация
Ниже приводится объявление синтаксиса <xsl:apply-template> элемент.
<xsl:apply-template
select = Expression
mode = QName >
</xsl:apply-template>
Атрибуты
Старший Нет | Имя и описание |
---|---|
1 | select Используется для обработки узлов, выбранных выражением XPath, вместо обработки всех дочерних элементов. |
2 | mode Позволяет обрабатывать элемент, указанный в его полных именах, несколько раз, каждый раз получая другой результат. |
Элементы
Количество вхождений | Безлимитный |
---|---|
Parent elements |
xsl: attribute, xsl: comment, xsl: copy, xsl: element, xsl: fallback, xsl: foreach, xsl: if, xsl: message, xsl: в противном случае, xsl: param, xsl: processinginstruction, xsl: template, xsl: переменная, xsl: when, xsl: with-param, выходные элементы |
Child elements |
xsl: sort, xsl: with-param |
Демо-пример
В этом примере создается список элементов <student> с его атрибутом rollno и его дочерние элементы <имя>, <имя>, <имя> и <метки> путем перебора каждого учащегося.
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>
Вывод
![](https://post.nghiatu.com/assets/tutorial/xslt/images/xlst_students_applytemplate.jpg)
Тег <xsl: import> импортирует содержимое одной таблицы стилей в другую. Импорт таблицы стилей имеет более высокий приоритет над импортированной таблицей стилей.
Декларация
Ниже приводится объявление синтаксиса <xsl:import> элемент.
<xsl:import href = "uri">
</xsl:import>
Атрибуты
Старший Нет | Имя и описание |
---|---|
1. | href используется для передачи пути к импортируемой таблице стилей xslt . |
Элементы
Number of occurrences | Безлимитный |
Parent elements | xsl: таблица стилей, xsl: преобразование |
Child elements | никто |
Демо-пример
В этом примере создается список элементов <student> с его атрибутом rollnoи его дочерние элементы <имя>, <имя>, <имя> и <метки> путем перебора каждого учащегося. Здесь мы создали две таблицы стилей xsl, в которых таблица стилей student_imports.xsl импортирует student.xsl, а student.xml связан с student_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>
Вывод
![](https://post.nghiatu.com/assets/tutorial/xslt/images/xlst_students.jpg)