Speak.Me Учить иностранные слова

XSL: элементы (xsl:element), атрибуты (xsl:attribute) и текст(xsl:text)

Основные узлы любого xml-дерева в xsl можно создавать с помощью инструкций xsl:element, xsl:attribute, xsl:text.

Инструкция xsl:element

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

Синтаксис:

Атрибуты:

  • name – является обязательным и задает имя (название) создаваемого атрибута, полностью аналогичен одноименному атрибуту инструкции xsl:element.
  • namespace – не обязательный атрибут, задает ссылку URI на пространство имен, полностью аналогичен одноименному атрибуту инструкции xsl:element.

Добавленный к элементу атрибут заменяет любой из уже имевшихся атрибутов этого элемента с таким же именем. Все содержимое элемента xsl:attribute (т.е. все его потомки) будет являться значением созданного конечного атрибута. Поэтому результатом обработки содержимого элемента xsl:attribute может быть только текст (текстовый узел). В противном случае любо будет зафиксирована ошибка, либо нетекстовые узлы будут проигнорированы и в конечное дерево не войдут (вариант поведения зависит от XSL-процессора). Элемент xsl:attribute должен быть первым непосредственным потомком того элемента, к которому добавляется атрибут. И только потом должно идти все остальное содержимое элемента. В противном случае (т.е. если элемент xsl:attribute будет не первым непосредственным потомком) любо будет зафиксирована ошибка, либо атрибут вообще будет проигнорирован и в конечное дерево не войдет (вариант поведения опять же зависит от XSL-процессора). Необходимо следить, чтобы не добавить атрибут к узлу, не являющемуся элементом. В этом случае также либо будет зафиксирована ошибка, либо атрибут будет проигнорирован.

Инструкция xsl:text

С помощью шаблонов можно создавать не только элементы, но и текстовые узлы. Вообще текстовые узлы (или просто текст) могут быть помещены в шаблон как фиксированные конечные элементы, т.е. шаблон может содержать текст без каких либо дополнительных инструкций. При этом такие текстовые узлы переносятся в конечное дерево без каких либо изменений. Смежные текстовые узлы в конечном дереве автоматически объединяются. Однако существует и специальная инструкция позволяющая создавать текстовые узлы. Это инструкция xsl:text. Разница с вышеописанным способом создания текстовых узлов заключается в том, что текст помещенный внутрь элемента xsl:text не подвергается удалению лишних пробельных символов, что неизбежно происходит при непосредственном размещении текста в шаблоне. Подробнее об удалении лишних пробельных символов будет сказано отдельно.

Синтаксис:

Атрибуты:

  • disable-output-escaping – дословно — отменить экранирование вывода. Определяет, следует ли экранировать результат, т.е. заменять определенные символы на html-сущности (< на &lt;, > на &gt; и так далее) или выводить их как есть. По умолчанию принимает значение no, т.е. вывод экранируется (символы заменяются на html-сущности, чтобы получить корректный xml-докуметн). Если установить значение yes — результат экранироваться не будет и символы заменяться не будут. Атрибут учитывается при методах вывода xml и html. При методе вывода text атрибут игнорируется, т.к. при этом методе весь вывод не экранируется.

Содержимым элемента xsl:text может быть только текст.