□ В нем объявлено пространство имен с префиксом xhtml
.
□ Литеральный элемент p
содержит объявление пространства имен с префиксом xslt
и URI http://www.w3.org/1999/XSL/Transform
.
□ Литеральный элемент p
содержит атрибут, xslt:exclude-result- prefixes
, принадлежащий пространству имен XSLT.
Как ни странно, ни одно из этих объявлений не проникнет в выходящий документ, который будет иметь вид
<p>4</p>
Попробуем объяснить такой результат. Атрибут xslt:exclude-result-prefixes
не был включен в результирующий элемент p
, поскольку принадлежал пространству имен XSLT (отметим еще раз, что принадлежность эта определяется не префиксом, а значением URI
). Далее, объявление пространства имен
xmlns:xslt='http://www.w3.org/1999/XSL/Transform'
которое содержалось в литеральном элементе p
, не вошло в результат, потому что URI этого объявления совпадало с URI пространства имен XSLT. И, наконец, объявление пространства имен xhtml
было исключено атрибутом exclude-result-prefixes
.
Атрибуты языка XSLT в литеральных элементах
Мы упомянули о том, что литеральные элементы могут содержать атрибуты, принадлежащие пространству имен XSLT. В табл. 4.3 они перечислены вместе с краткими описаниями назначения.
Атрибут | Назначение |
---|---|
xsl:version | Указывает версию языка в случае использования упрощенного синтаксиса записи преобразований |
xsl:exclude-result-prefixes | Перечисляет префиксы пространств имен, которые должны быть исключены в данном элементе |
xsl:extension-element-prefixes | Перечисляет префиксы пространств имен, которые используются в элементах расширения |
xsl:use-attribute-sets | Перечисляет названия именованных наборов атрибутов, которые следует включить в данный элемент на выходе |
Шаблоны значений атрибутов
Во многих элементах XSLT в качестве значений атрибутов могут быть указаны специальные шаблоны, называемые {}
'). Если процессор встретит внутри значения атрибута выражение в таких скобках, он должен будет вычислить это выражение и заменить его в атрибуте вместе с фигурными скобками на результат вычисления в строковом виде.
Довольно часто в практике программирования на XSLT встречается потребность создавать элементы с именами, которые заранее не известны, но могут быть вычислены в ходе выполнения преобразования. Представим себе документ
<mark-up type='b'>This text should be marked bold.</mark-up>
в котором атрибут type
элемента mark-up
указывает на тип элемента разметки, который должен быть использован для данного текстового фрагмента. Для того чтобы получить элемент вида
<b>This text should be marked bold.</b>
можно использовать следующий шаблон:
<xsl:template match='mark-up'>
<xsl:element name='{@type}'>
<xsl:value-of select='.'/>
</xsl:element>
</xsl:template>
Таким образом, в качестве имени нового элемента, содержащего текст элемента mark- up
, будет использовано значение атрибута type
.
В одном атрибуте можно использовать несколько выражений — каждое из них должно быть заключено в фигурные скобки.
Предположим, что мы хотим вывести ссылки на графические изображения в виде иконок. Мы задаем список файлов в виде XML-документа:
<images dir='/images'>
<image filename='rose.jpg'/>
<image filename='orchide.gif'/>
<image filename='primul.gif'/>
</images>
Файлы хранятся в каталоге, указанном в атрибуте dir
элемента images
, а иконки имеют те же имена файлов, что и большие изображения, но с префиксом 'th_
'. Для получения ссылок на изображения мы можем воспользоваться следующим преобразованием:
<xsl:template match='images/image'>
<а href='{../@dir}/{@filename}'>
<img src='{../@dir}/th_{@filename}'/>
</a>