Синтаксис XSL
В заголовке документа помещается объявление XML, в котором указывается язык разметки документа, номер его версии и дополнительная информация, а в самом начале документа указывается стилистика XML и импорт пространства имен XML
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<xsl:template match="/">
...
</xsl:template>
... </xsl:stylesheet>
Элемент xsl:stylesheet может содержать следующие типы элементов:
- xsl:import
- xsl:include
- xsl:strip-space
- xsl:preserve-space
- xsl:output
- xsl:key
- xsl:decimal-format
- xsl:namespace-alias
- xsl:attribute-set
- xsl:variable
- xsl:param
- xsl:template
В общем случае содержание XSL-документа должно удовлетворять определенным требованиям:
- каждый открывающий тэг, определяющий некоторую область данных в документе обязательно должен иметь закрывающий тэг;
Правильно:
<p>Абзац</p> <img src="/hostcms/image1.gif" alt="" border= "0" />
Неправильно:<p> — непарный тег, нет закрывающего тега, либо отсутствует слэш в конце тега <img src="/hostcms/image1.gif" alt="" border= "0"> — Непарный тэг, отсутствует слэш в конце тега
- в XML учитывается регистр символов;
- все значения атрибутов, используемых в определении тэгов, должны быть заключены в кавычки:
Правильно:
<img src="/hostcms/image1.gif" alt="" border= "0" />
Неправильно:<img src=/hostcms/image1.gif alt="" border= "0" /> — Значение параметра src не взято в кавычки
- вложенность тэгов в XML строго контролируется, поэтому необходимо следить за порядком следования открывающих и закрывающих тэгов:
Правильно:
<strong>Жирный текст <i>Текст курсивом</i></strong>
Неправильно:<strong>Жирный текст <i>Текст курсивом</strong></i>
- вся информация, располагающаяся между начальным и конечным тэгами, рассматривается в XML как данные, и поэтому учитываются все символы форматирования;
- Символ неразрывного пробела необходимо записывать как   или  
Использование сущностей
Если XML-документ содержит ссылку на сущность, сущность должна быть объявлена, в противном случае документ недействителен. XML имеет только 5 предопределенных сущностей:
&
для&
<
для<
>
для>
"
для"
'
для'
Неразрывный пробел
Вместо можно использовать  
или  
, также можно использовать сам символ неразрывного пробела, для его набора нажмите Alt+0160.
Иным вариантом является объявление собственной сущности и затем использование
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp " "> ]> <xsl:stylesheet version="1.0" …
Использование значений XML в атрибутах тегов
Для использования значения XML-тега, путь должен быть заключен в фигурные скобки, например:
<!-- Шаблон для товара -->
<xsl:template match="shop_item">
<xsl:if test="image_small != ''">
<img src="{dir}{image_small}" alt="{name}" title="{name}" />
</xsl:if>
<div>
<a href="{url}" title="{name}">
<xsl:value-of disable-output-escaping="yes" select="name"/>
</a>
</div>
</xsl:template>
Для изображения в src подставляется значения тега dir
и image_small
, в атрибуты alt
и title
передается значение тега name
.
Использование Javascript
Для вывода Javascript кода используйте следующую конструкцию:
<script type="text/javascript">
<xsl:comment>
<xsl:text disable-output-escaping="yes">
<![CDATA[
ЗДЕСЬ_КОД
]]>
</xsl:text>
</xsl:comment>
</script>
Если Вам нужно подставить какие-либо данные в Javascript-код из XML, то Javascript-код оборачиваете в некую функцию, которая принимает параметр myfunct(x, y, z) и т.д. Сами параметры вызываете в отдельном блоке, например:
<script type="text/javascript">
myfunct('<xsl:value-of ... />', '<xsl:value-of ... />', '<xsl:value-of ... />');
</script>
Экранирование
При необходимости использовать фигурную скобку в атрибутах, экранирование осуществляется удвоением скобки:
<a href="#" onclick="jQuery.function( {{ field: 'value', image: '{../dir}{file_small}' }} )">...</a>