Содержание
Основные узлы любого 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 может быть только текст.

