Краткое руководство по 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 для генерации фактического вывода, который должен отображаться конечному пользователю.

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

Вот преимущества использования 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>

Вывод

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

Вывод

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

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

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

Вывод

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

Вывод

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

Вывод

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

Вывод

Элемент тега <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>

Вывод

Элемент тега <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>

Вывод

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

Вывод

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

Вывод