Учебники

Краткое руководство по XSLT

XSLT Обзор

Прежде чем изучать XSLT, мы должны сначала понять XSL, что означает E X X- LX. Это похоже на XML, как CSS на HTML.

Нужен для XSL

В случае HTML-документа предварительно определены теги, такие как таблица, div и span; и браузер знает, как добавить стиль к ним и отобразить те, которые используют стили CSS. Но в случае документов XML теги не предопределены. Чтобы понять и оформить XML-документ, Консорциум World Wide Web (W3C) разработал XSL, который может выступать в качестве языка таблиц стилей на основе XML. Документ XSL определяет, как браузер должен отображать документ XML.

Ниже приведены основные части XSL —

  • XSLT — используется для преобразования XML-документа в различные другие типы документов.

  • XPath — используется для навигации по документу XML.

  • XSL-FO — используется для форматирования документа XML.

XSLT — используется для преобразования XML-документа в различные другие типы документов.

XPath — используется для навигации по документу XML.

XSL-FO — используется для форматирования документа XML.

Что такое XSLT

XSLT, Преобразования расширяемого языка таблиц стилей, предоставляет возможность автоматического преобразования данных XML из одного формата в другой.

Как работает XSLT

Таблица стилей XSLT используется для определения правил преобразования, которые будут применяться к целевому документу XML. Таблица стилей XSLT написана в формате XML. XSLT Processor берет таблицу стилей XSLT и применяет правила преобразования к целевому XML-документу, а затем генерирует отформатированный документ в форме XML, HTML или текстового формата. Этот форматированный документ затем используется средством форматирования XSLT для генерации фактического вывода, который должен отображаться конечному пользователю.

Рабочий процесс XSLT

преимущества

Вот преимущества использования XSLT —

  • Независимо от программирования. Преобразования записываются в отдельный файл xsl, который снова является документом XML.

  • Вывод можно изменить, просто изменив преобразования в файле xsl. Нет необходимости менять код. Таким образом, веб-дизайнеры могут редактировать таблицу стилей и быстро увидеть изменения в выводе.

Независимо от программирования. Преобразования записываются в отдельный файл xsl, который снова является документом XML.

Вывод можно изменить, просто изменив преобразования в файле xsl. Нет необходимости менять код. Таким образом, веб-дизайнеры могут редактировать таблицу стилей и быстро увидеть изменения в выводе.

Синтаксис XSLT

Предположим, у нас есть следующий пример 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-документа, чтобы он соответствовал следующим критериям:

  • Страница должна иметь название Студенты .

  • Страница должна иметь таблицу данных о студентах.

  • Столбцы должны иметь следующие заголовки: № броска, Имя, Фамилия, Ник, Марки

  • Таблица должна содержать информацию о студентах соответственно.

Страница должна иметь название Студенты .

Страница должна иметь таблицу данных о студентах.

Столбцы должны иметь следующие заголовки: № броска, Имя, Фамилия, Ник, Марки

Таблица должна содержать информацию о студентах соответственно.

Шаг 1. Создайте документ XSLT

Создайте документ XSLT, отвечающий указанным выше требованиям, назовите его как Students.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 для Students.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>   

Выход

Форматированный вывод

XSLT <шаблон>

<xsl: template> определяет способ повторного использования шаблонов для генерации желаемого вывода для узлов определенного типа / контекста.

декларация

Ниже приводится объявление синтаксиса элемента <xsl: template> .

<xsl:template 
   name = Qname 
   match = Pattern 
   priority = number 
   mode = QName >
</xsl:template>

Атрибуты

Sr.No Имя и описание
1

название

Имя элемента, к которому должен быть применен шаблон.

2

матч

Шаблон, который обозначает элемент (ы), к которому должен быть применен шаблон.

3

приоритет

Приоритетный номер шаблона. Соответствующий шаблон с низким приоритетом не рассматривается перед шаблоном с высоким приоритетом.

4

Режим

Позволяет элементу обрабатываться несколько раз, каждый раз получая разные результаты.

название

Имя элемента, к которому должен быть применен шаблон.

матч

Шаблон, который обозначает элемент (ы), к которому должен быть применен шаблон.

приоритет

Приоритетный номер шаблона. Соответствующий шаблон с низким приоритетом не рассматривается перед шаблоном с высоким приоритетом.

Режим

Позволяет элементу обрабатываться несколько раз, каждый раз получая разные результаты.

элементы

Количество вхождений неограниченный

Родительские элементы

xsl: таблица стилей, xsl: transform

Дочерние элементы

xsl: apply-import, xsl: apply-templates, xsl: атрибут, xsl: шаблон вызова, xsl: выбор, xsl: комментарий, xsl: копирование, xsl: copy-of, xsl: элемент, xsl: отступление, xsl: for-each, xsl: if, xsl: message, xsl: номер, xsl: param, xsl: инструкция обработки, xsl: текст, xsl: value-of, xsl: переменная, выходные элементы

Родительские элементы

xsl: таблица стилей, xsl: transform

Дочерние элементы

xsl: apply-import, xsl: apply-templates, xsl: атрибут, xsl: шаблон вызова, xsl: выбор, xsl: комментарий, xsl: копирование, xsl: copy-of, xsl: элемент, xsl: отступление, xsl: for-each, xsl: if, xsl: message, xsl: номер, xsl: param, xsl: инструкция обработки, xsl: текст, xsl: value-of, xsl: переменная, выходные элементы

Демо-пример

Это шаблонное правило имеет шаблон, который идентифицирует элементы <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>

Выход

Форматированный вывод

XSLT <значение-из>

Тег <xsl: value-of> помещает значение выбранного узла в соответствии с выражением XPath в виде текста.

декларация

Ниже приводится объявление синтаксиса элемента <xsl: value-of> .

<xsl:value-of
   select = Expression
   disable-output-escaping = "yes" | "no" >
</xsl:value-of>

Атрибуты

Sr.No Имя и описание
1

Выбрать

Выражение XPath для оценки в текущем контексте.

2

Disable-outputescaping

Default- «нет». Если «да», выходной текст не будет экранировать символы XML от текста.

Выбрать

Выражение XPath для оценки в текущем контексте.

Disable-outputescaping

Default- «нет». Если «да», выходной текст не будет экранировать символы XML от текста.

элементы

Количество вхождений неограниченный

Родительские элементы

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, выходные элементы

Дочерние элементы

Никто

Родительские элементы

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, выходные элементы

Дочерние элементы

Никто

Демо-пример

В этом примере создается таблица элемента <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>

Проверьте вывод

Форматированный вывод

XSLT <для каждого>

Тег <xsl: for-each> применяет шаблон повторно для каждого узла.

декларация

Ниже приводится объявление синтаксиса элемента <xsl: for-each>

<xsl:for-each
   select = Expression >  
</xsl:for-each>

Атрибуты

Sr.No Имя и описание
1

Выбрать

Выражение XPath для оценки в текущем контексте, чтобы определить набор узлов, подлежащих итерации.

Выбрать

Выражение XPath для оценки в текущем контексте, чтобы определить набор узлов, подлежащих итерации.

элементы

Количество вхождений неограниченный

Родительские элементы

xsl: attribute, xsl: comment, xsl: copy, xsl: element, xsl: fallback, xsl: foreach, xsl: if, xsl: message, xsl: иначе, xsl: param, xsl: инструкция по обработке, xsl: template, xsl: переменная, xsl: when, xsl: with-param, выходные элементы.

Дочерние элементы

xsl: apply-import, xsl: apply-templates, xsl: атрибут, xsl: шаблон вызова, xsl: выбор, xsl: комментарий, xsl: копирование, xsl: copy-of, xsl: элемент, xsl: отступление, xsl: for-each, xsl: if, xsl: message, xsl: number, xsl: инструкция обработки, xsl: sort, xsl: text, xsl: value-of, xsl: variable.

Родительские элементы

xsl: attribute, xsl: comment, xsl: copy, xsl: element, xsl: fallback, xsl: foreach, xsl: if, xsl: message, xsl: иначе, xsl: param, xsl: инструкция по обработке, xsl: template, xsl: переменная, xsl: when, xsl: with-param, выходные элементы.

Дочерние элементы

xsl: apply-import, xsl: apply-templates, xsl: атрибут, xsl: шаблон вызова, xsl: выбор, xsl: комментарий, xsl: копирование, xsl: copy-of, xsl: элемент, xsl: отступление, xsl: for-each, xsl: if, xsl: message, xsl: number, xsl: инструкция обработки, 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>

Выход

Форматированный вывод

XSLT <сортировка>

Тег <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> 

Атрибуты

Sr.No Имя и описание
1

Выбрать

Ключ сортировки узла.

2

языки

Язык алфавита, используемый для определения порядка сортировки.

3

тип данных

Тип данных текста.

4

порядок

Порядок сортировки. По умолчанию «по возрастанию».

5

Дело порядка

Порядок сортировки строк по заглавным буквам. По умолчанию «верхний-первый».

Выбрать

Ключ сортировки узла.

языки

Язык алфавита, используемый для определения порядка сортировки.

тип данных

Тип данных текста.

порядок

Порядок сортировки. По умолчанию «по возрастанию».

Дело порядка

Порядок сортировки строк по заглавным буквам. По умолчанию «верхний-первый».

элементы

Количество вхождений неограниченный
Родительские элементы xsl: apply-templates, xsl: for-each
Дочерние элементы Никто

Демо-пример

В этом примере создается таблица элемента <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"> 
					
                  <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>

Выход

Форматированный вывод сортировки

XSLT <if>

Тег <xsl: if> указывает условный тест на содержание узлов.

декларация

Ниже приводится объявление синтаксиса элемента <xsl: if> .

<xsl:if 
  test = boolean-expression > 
</xsl:if> 

Атрибуты

Sr.No Имя и описание
1

тестовое задание

Условие в данных XML для проверки.

тестовое задание

Условие в данных XML для проверки.

элементы

Количество вхождений неограниченный

Родительские элементы

xsl: attribute, xsl: comment, xsl: copy, xsl: element, xsl: fallback, xsl: for-each, xsl: if, xsl: message, xsl: иначе, xsl: param, xsl: инструкция обработки, xsl: шаблон, xsl: variable, xsl: when, xsl: with-param, выходные элементы

Дочерние элементы

xsl: apply-templates, xsl: атрибут, xsl: call-template, xsl: выбор, xsl: комментарий, xsl: копия, xsl: copy-of, xsl: элемент, xsl: for-each, xsl: if, xsl: инструкция обработки, xsl: текст, xsl: значение-значения, xsl: переменная, выходные элементы

Родительские элементы

xsl: attribute, xsl: comment, xsl: copy, xsl: element, xsl: fallback, xsl: for-each, xsl: if, xsl: message, xsl: иначе, xsl: param, xsl: инструкция обработки, xsl: шаблон, xsl: variable, xsl: when, xsl: with-param, выходные элементы

Дочерние элементы

xsl: apply-templates, xsl: атрибут, xsl: call-template, xsl: выбор, xsl: комментарий, xsl: копия, xsl: copy-of, xsl: элемент, xsl: for-each, xsl: if, xsl: инструкция обработки, xsl: текст, xsl: значение-значения, xsl: переменная, выходные элементы

Демо-пример

В этом примере создается таблица элемента <student> с его атрибутом rollno и его дочерним элементом <firstname>, <lastname>, <nickname> и <marks> путем итерации по каждому студенту. Он проверяет отметки, чтобы быть больше 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>

Выход

Форматированный вывод IF

XSLT <выбрать>

Тег <xsl: choose> задает несколько условных проверок содержимого узлов вместе с элементами <xsl: else> и <xsl: when>.

декларация

Ниже приводится объявление синтаксиса элемента <xsl: choose> .

<xsl:choose >
</xsl:choose>

элементы

Количество вхождений неограниченный

Родительские элементы

xsl: attribute, xsl: comment, xsl: copy, xsl: element, xsl: fallback, xsl: for-each, xsl: if, xsl: message, xsl: иначе, xsl: param, xsl: инструкция обработки, xsl: шаблон, xsl: variable, xsl: when, xsl: with-param, выходные элементы

Дочерние элементы

xsl: в противном случае xsl: когда

Родительские элементы

xsl: attribute, xsl: comment, xsl: copy, xsl: element, xsl: fallback, xsl: for-each, xsl: if, xsl: message, xsl: иначе, xsl: param, xsl: инструкция обработки, xsl: шаблон, xsl: variable, xsl: when, xsl: with-param, выходные элементы

Дочерние элементы

xsl: в противном случае xsl: когда

Демо-пример

В этом примере создается таблица элемента <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> 
                  <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>

Выход

Форматированный Выберите вывод

XSLT <ключ>

Элемент тега <xsl: key> указывает именованную пару имя-значение, назначенную определенному элементу в документе XML. Этот ключ используется с функцией key () в выражениях XPath для доступа к назначенным элементам в документе XML.

декларация

Ниже приводится объявление синтаксиса элемента <xsl: key> .

<xsl:key 
   name = QName 
   match = Pattern 
   use = Expression > 
</xsl:key>

Атрибуты

S.No Имя и описание
1

название

Название ключа, который будет использоваться.

2

Матч

Шаблоны, используемые для идентификации узла, который содержит этот ключ.

3

использование

Выражение XPath для определения значения узлов документа xml.

название

Название ключа, который будет использоваться.

Матч

Шаблоны, используемые для идентификации узла, который содержит этот ключ.

использование

Выражение XPath для определения значения узлов документа xml.

элементы

Количество вхождений неограниченный
Родительские элементы XSL: таблицы стилей
Дочерние элементы Никто

Демо-пример

В этом примере создается таблица элемента <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

<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>

Выход

Форматированный ключ вывода

XSLT <сообщение>

Элемент тега <message> помогает отлаживать обработку XSLT. Это похоже на предупреждения JavaScript. Тег <xsl:> буферизует сообщение процессору XSLT, который завершает обработку и отправляет сообщение в приложение вызывающей стороны для отображения сообщения об ошибке.

декларация

Ниже приводится объявление синтаксиса элемента <xsl: message> .

<xsl:message 
   terminate = "yes" | "no" >
</xsl:message>

Атрибуты

Sr.No Имя и описание
1

прекратить

Он указывает, должно ли преобразование завершаться при выполнении этой инструкции или нет. По умолчанию «да».

прекратить

Он указывает, должно ли преобразование завершаться при выполнении этой инструкции или нет. По умолчанию «да».

элементы

Количество вхождений неограниченный
Родительские элементы

xsl: attribute, xsl: comment, xsl: copy, xsl: element, xsl: fallback, xsl: foreach, xsl: if, xsl: message, xsl: иначе, xsl: param, xsl: инструкция по обработке, xsl: template, xsl: переменная, xsl: when, xsl: with-param, выходные элементы

Дочерние элементы

xsl: apply-templates, xsl: атрибут, xsl: call-template, xsl: выбор, xsl: комментарий, xsl: копия, xsl: copy-of, xsl: элемент, xsl: for-each, xsl: if, xsl: инструкция обработки, xsl: текст, xsl: значение-значения, xsl: переменная, выходные элементы

xsl: attribute, xsl: comment, xsl: copy, xsl: element, xsl: fallback, xsl: foreach, xsl: if, xsl: message, xsl: иначе, xsl: param, xsl: инструкция по обработке, xsl: template, xsl: переменная, xsl: when, xsl: with-param, выходные элементы

Дочерние элементы

xsl: apply-templates, xsl: атрибут, xsl: call-template, xsl: выбор, xsl: комментарий, xsl: копия, xsl: copy-of, xsl: элемент, xsl: for-each, xsl: if, xsl: инструкция обработки, xsl: текст, xsl: значение-значения, xsl: переменная, выходные элементы

Демо-пример

В этом примере создается таблица элемента <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></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> 

Выход

Форматированный вывод сообщения

XSLT <apply-template>

Тег <xsl: apply-template> сигнализирует процессору XSLT найти подходящий шаблон для применения на основе типа и контекста каждого выбранного узла.

декларация

Ниже приводится объявление синтаксиса элемента <xsl: apply-template> .

<xsl:apply-template 
   select = Expression 
   mode = QName > 
</xsl:apply-template> 

Атрибуты

Sr.No Имя и описание
1

Выбрать

Используется для обработки узлов, выбранных выражением XPath, вместо обработки всех дочерних элементов.

2

Режим

Позволяет элементу, указанному в его квалифицированных именах, обрабатываться несколько раз, каждый раз получая разные результаты.

Выбрать

Используется для обработки узлов, выбранных выражением XPath, вместо обработки всех дочерних элементов.

Режим

Позволяет элементу, указанному в его квалифицированных именах, обрабатываться несколько раз, каждый раз получая разные результаты.

элементы

Количество вхождений неограниченный

Родительские элементы

xsl: attribute, xsl: comment, xsl: copy, xsl: element, xsl: fallback, xsl: foreach, xsl: if, xsl: message, xsl: иначе, xsl: param, xsl: инструкция по обработке, xsl: template, xsl: переменная, xsl: when, xsl: with-param, выходные элементы

Дочерние элементы

xsl: sort, xsl: with-param

Родительские элементы

xsl: attribute, xsl: comment, xsl: copy, xsl: element, xsl: fallback, xsl: foreach, xsl: if, xsl: message, xsl: иначе, xsl: param, xsl: инструкция по обработке, xsl: template, xsl: переменная, xsl: when, xsl: with-param, выходные элементы

Дочерние элементы

xsl: sort, xsl: with-param

Демо-пример

В этом примере создается список элемента <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> 
            <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>

Выход

Форматированный вывод шаблона

XSLT <импорт>

Тег <xsl: import> импортирует содержимое одной таблицы стилей в другую. Импорт таблицы стилей имеет более высокий приоритет по сравнению с импортированной таблицей стилей.

декларация

Ниже приводится объявление синтаксиса элемента <xsl: import> .

<xsl:import href = "uri"> 
</xsl:import>

Атрибуты

Sr.No Имя и описание
1.

HREF

используется для передачи пути таблицы стилей xslt для импорта

,

HREF

используется для передачи пути таблицы стилей xslt для импорта

элементы

Количество вхождений неограниченный
Родительские элементы xsl: таблица стилей, xsl: transform
Дочерние элементы никто

Демо-пример

В этом примере создается список элемента <student> с его атрибутом rollno и его дочерним элементом <firstname>, <lastname>, <nickname> и <marks> путем итерации по каждому студенту. Здесь мы создали две таблицы стилей 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