Элемент xsl:attribute-set
Элемент xsl:attribute-set
Синтаксис элемента определяется следующей конструкцией:
<xsl:attribute-set
name="имя"
use-attribute-sets="имена">
<!-- Содержимое: несколько элементов xsl:attribute -->
</xsl:attribute-set>
Для того чтобы упростить создание в элементах целых наборов атрибутов, можно заранее определить их в элементе xsl:attribute-set. Обязательный атрибут name задает имя набора атрибутов. Элемент xsl:attribute-set содержит последовательность, состоящую из нуля или более элементов xsl:attribute.
Именованные наборы атрибутов можно использовать, указывая их имена в значении атрибута use-attribute-sets, который может присутствовать в элементах xsl:element, xsl:copy и xsl:attribute-set, а также в литеральных результирующих элементах. В атрибуте use-attribute-sets через пробел перечисляются имена наборов атрибутов, которые должны быть использованы в данном элементе.
Включение набора атрибутов в элемент равносильно простому копированию элементов xsl:attribute, определенных в соответствующих элементах xsl:attribute-set.
Пример
Предположим, что во входящем документе нам нужно вывести структуру, состоящую из элементов с именем element, атрибут name которых равен имени, атрибут attr-count — количеству атрибутов, а атрибут node-count — количеству дочерних узлов соответствующего элемента.
Листинг 7.8. Входящий документ
<a b="1" c="2">
<d e="3" f="4" g="5"/>
</a>
Листинг 7.9. Преобразование
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:attribute-set name="attrs">
<xsl:attribute name="attr-count">
<xsl:value-of select="count(@*)"/>
</xsl:attribute>
</xsl:attribute-set>
<xsl:attribute-set name="elements">
<xsl:attribute name="name">
<xsl:value-of select="name()"/>
</xsl:attribute>
<xsl:attribute name="node-count">
<xsl:value-of select="count(*)"/>
</xsl:attribute>
</xsl:attribute-set>
<xsl:template match="*">
<xsl:element name="element"
use-attribute-sets="elements attrs">
<xsl:apply-templates select="*"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Листинг 7.10. Выходящий документ
<?xml version="1.0" encoding="utf-8"?>
<element name="a" node-count="1" attr-count="2">
<element name="d" node-count="0" attr-count="3"/>
</element>
В этом преобразовании определение элемента
<xsl:element name="element"
use-attribute-sets="elements attrs">
<xsl:apply-templates select="*"/>
</xsl:element>
равносильно определению
<xsl:element name="element">
<xsl:attribute name="name">
<xsl:value-of select="name()"/>
</xsl:attribute>
<xsl:attribute name="node-count">
<xsl:value-of select="count(*)"/>
</xsl:attribute>
<xsl:attribute name="attr-count">
<xsl:value-of select="count(@*)"/>
</xsl:attribute>
<xsl:apply-templates select="*"/>
</xsl:element>
Как уже было сказано, элемент xsl:attribute-set может также использовать другие наборы атрибутов при помощи use-attribute-sets. Например, в предыдущем преобразовании набор атрибутов elements мог быть определен как:
<xsl:attribute-set name="elements"
use-attribute-sets="attrs">
<xsl:attribute name="name">
<xsl:value-of select="name()"/>
</xsl:attribute>
<xsl:attribute name="node-count">
<xsl:value-of select="count(*)"/>
</xsl:attribute>
</xsl:attribute-set>
Тогда для достижения того же результата элемент с именем element мог быть создан с использованием только одного набора атрибутов:
<xsl:element name="element"
use-attribute-sets="elements">
<xsl:apply-templates select="*"/>
</xsl:element>
Именованный набор атрибутов не может прямо или косвенно (посредством других наборов атрибутов) использовать в значении use-attribute-sets себя самого. Такая ситуация породила бы бесконечный цикл. Вообще, не рекомендуется выстраивать сложную иерархию именованных наборов атрибутов, поскольку это может сильно усложнить обработку и снизить эффективность преобразования, хотя, естественно, все зависит от конкретного случая.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Элемент
Элемент Элементы – это любые единичные компоненты структуры, например, заголовок, абзац текста, фотография или
Элемент <xsl:if>
Элемент <xsl:if> При помощи элемента <xsl:if> осуществляются проверки условия и принимаются действия на основе результата проверки. Он во многом похож на оператор if в языках программирования. У элемента <xsl:if> один атрибут:• test (обязательный). Устанавливается в
Элемент <xsl:for-each>
Элемент <xsl:for-each> Элемент <xsl:for-each> позволяет применять тело шаблона в цикле снова и снова для всех элементов набора узлов. С технической точки зрения, он работает с набором узлов, который возвращает выражение XPath и выполняет одно и то же действие с каждым узлом в
Элемент <xsl:attribute>: создание новых атрибутов
Элемент <xsl:attribute>: создание новых атрибутов Аналогично тому, как вы можете создавать новые элементы при помощи <xsl:element> и устанавливать имя и содержимое элемента на этапе выполнения, при помощи элемента <xsl:attribute> это можно делать для атрибутов. У элемента два
Элемент <?job?>
Элемент <?job?> Элемент <?job?> задает режим отладки при выполнении WS-файла. Если значение атрибута debug равно true, то задание может быть выполнено во внешнем отладчике (см. приложение 3). Если же значение атрибута debug равно false, то отладчик для этого задания применен быть не
Элемент <job>
Элемент <job> Элементы <job> позволяют определять несколько заданий (независимо выполняющихся частей) в одном WS-файле. Иначе говоря, между тегами <job> и </job> будет находиться отдельный сценарий (который, в свою очередь, может состоять из нескольких частей,
Элемент <example>
Элемент <example> Внутри элемента <example> приводится текст из одной или нескольких строк, в котором можно описать примеры запуска сценария. Если сценарий был запущен с ключом /? в командной строке или в сценарии встретился вызов метода ShowUsage объекта WshArguments, то этот текст
A — значит Attribute
A — значит Attribute Мы начинаем планирование тестирования, или ACC-анализ, с выявления, почему этот продукт важен для пользователя и для бизнеса. Зачем мы создаем его? Какова его основная ценность? Почему он интересен пользователю? Помните, что разработчики и руководители
Атрибут xsl:use-attribute-sets
Атрибут xsl:use-attribute-sets Мы упомянули о том, что именованные наборы атрибутов используются в элементах посредством атрибута xsl:use-attribute-sets. Разберем более детально, где этот атрибут может применяться, и какие функции он при этом выполняет. Для удобства эти данные сведены в
Элемент xsl:if
Элемент xsl:if Синтаксис элемента следующий:<xsl:if test="выражение"> <!-- Содержимое: шаблон --></xsl:if>Элемент xsl:if является простейшим условным оператором в XSLT. Выражение, содержащееся в обязательном атрибуте test, вычисляется и приводится к булевому типу. В том и только том