Основные узлы любого xml-дерева в xsl можно создавать с помощью инструкций xsl:element, xsl:attribute, xsl:text.
Инструкция xsl:element
Инструкция xsl:element
позволяет создавать конечный элемент с вычисляемым названием.
Синтаксис:
1 2 3 4 5 6 | <xsl:element name = "{XPath}|строка" namespace = "{XPath}|строка" use-attribute-sets = "строка"> Инструкции или фиксированные конечные элементы </xsl:element> |
Атрибуты:
name
– является обязательным и задает имя (название) создаваемого элемента. Значением данного атрибута может быть строка (т.е. просто текст) либо выражение XPath, которое должно быть заключено в фигурные скобки (иначе процессор воспримет его как строку и включит в конечное дерево без изменений). Как правило, используется последний вариант (выражение XPath), поскольку инструкцияxsl:element
в основном служит для создания элементов с вычисляемым названием. Создавать с ее помощью элементы с фиксированным названием тоже можно, но проще для этого использовать фиксированные конечные элементы.namespace
– не является обязательным и задает ссылку URI на пространство имен. Значение данного атрибута подчиняется тем же правилам, что и значение атрибутаname
.use-attribute-sets
– не обязательный атрибут, позволяет добавить к создаваемому элементу именованный набор атрибутов, созданный с помощью элемента верхнего уровняxsl:attribute-set
. Значением данного атрибута является имя именованного набора атрибутов, который планируется использовать (т.е. должно соответствовать значению атрибутаname
элементаxsl:attribute-set
, создающей используемый набор атрибут). Подробнее об этом будет сказано в описании элемента верхнего уровняxsl:attribute-set
.
Все содержимое элемента xsl:element
(т.е. все его потомки) будет являться содержимым (потомками) созданного им конечного элемента. Иными словами, все, что помещено между открывающим и закрывающим тегом xsl:element
, будет в конечном дереве находиться между открывающим и закрывающим тегом созданного элемента.
Инструкция xsl:attribute
С помощью инструкции xsl:attribute
можно к конечным элементам добавлять атрибуты. Причем абсолютно не важно, были ли эти элементы созданы с помощью фиксированных конечных элементов или с помощью инструкций XSL, таких как xsl:element
. Создаваемый инструкций xsl:attribute
атрибут будет добавлен к тому элементу, в который данная инструкция заключена.
Синтаксис:
1 2 3 4 5 | <xsl:attribute name = "{XPath}|строка" namespace = "{XPath}|строка"> Инструкции или фиксированные конечные элементы </xsl:attribute> |
Атрибуты:
name
– является обязательным и задает имя (название) создаваемого атрибута, полностью аналогичен одноименному атрибуту инструкцииxsl:element
.namespace
– не обязательный атрибут, задает ссылку URI на пространство имен, полностью аналогичен одноименному атрибуту инструкцииxsl:element
.
Добавленный к элементу атрибут заменяет любой из уже имевшихся атрибутов этого элемента с таким же именем. Все содержимое элемента xsl:attribute
(т.е. все его потомки) будет являться значением созданного конечного атрибута. Поэтому результатом обработки содержимого элемента xsl:attribute
может быть только текст (текстовый узел). В противном случае любо будет зафиксирована ошибка, либо нетекстовые узлы будут проигнорированы и в конечное дерево не войдут (вариант поведения зависит от XSL-процессора). Элемент xsl:attribute
должен быть первым непосредственным потомком того элемента, к которому добавляется атрибут. И только потом должно идти все остальное содержимое элемента. В противном случае (т.е. если элемент xsl:attribute
будет не первым непосредственным потомком) любо будет зафиксирована ошибка, либо атрибут вообще будет проигнорирован и в конечное дерево не войдет (вариант поведения опять же зависит от XSL-процессора). Необходимо следить, чтобы не добавить атрибут к узлу, не являющемуся элементом. В этом случае также либо будет зафиксирована ошибка, либо атрибут будет проигнорирован.
Инструкция xsl:text
С помощью шаблонов можно создавать не только элементы, но и текстовые узлы. Вообще текстовые узлы (или просто текст) могут быть помещены в шаблон как фиксированные конечные элементы, т.е. шаблон может содержать текст без каких либо дополнительных инструкций. При этом такие текстовые узлы переносятся в конечное дерево без каких либо изменений. Смежные текстовые узлы в конечном дереве автоматически объединяются. Однако существует и специальная инструкция позволяющая создавать текстовые узлы. Это инструкция xsl:text
. Разница с вышеописанным способом создания текстовых узлов заключается в том, что текст помещенный внутрь элемента xsl:text
не подвергается удалению лишних пробельных символов, что неизбежно происходит при непосредственном размещении текста в шаблоне. Подробнее об удалении лишних пробельных символов будет сказано отдельно.
Синтаксис:
1 2 3 4 | <xsl:text disable-output-escaping = "yes|no"> #PCDATA (текст) </xsl:text> |
Атрибуты:
disable-output-escaping
– дословно — отменить экранирование вывода. Определяет, следует ли экранировать результат, т.е. заменять определенные символы на html-сущности (<
на<
,>
на>
и так далее) или выводить их как есть. По умолчанию принимает значениеno
, т.е. вывод экранируется (символы заменяются на html-сущности, чтобы получить корректный xml-докуметн). Если установить значениеyes
— результат экранироваться не будет и символы заменяться не будут. Атрибут учитывается при методах выводаxml
иhtml
. При методе выводаtext
атрибут игнорируется, т.к. при этом методе весь вывод не экранируется.
Содержимым элемента xsl:text
может быть только текст.