Вход/Регистрация
Технология XSLT
вернуться

Валиков Алексей Н.

Шрифт:

 • 

@префикс:*
или
attribute::префикс:*
— выбор всех атрибутов в определенном пространстве имен.

Примеры паттернов с приоритетом, равным

– 0.25
:

 • 

fo:*
— выбор всех дочерних элементов в пространстве имен с префиксом
fo
;

 • 

attribute::xsl:*
— выбор всех атрибутов текущего элемента, которые находятся в пространстве имен с префиксом
xsl
.

□ Если паттерн состоит из проверки узла (

NodeTest
), которой предшествует
ChildOrAttributeAxisSpecifier
, приоритет шаблона будет равен
– 0.5
. Паттерны такого рода будут выглядеть как:

 • 

NodeTest
или
child::NodeTest
— выбор всех дочерних узлов, соответствующих данной проверке;

 • 

QNodeTest
или
attribute::NodeTest
— выбор всех атрибутов, соответствующих данной проверке.

□ Примеры паттернов с приоритетом, равным

– 0.5
:

 • 

text
— выбор дочерних текстовых узлов;

 • 

child::comment
— выбор дочерних комментариев;

 • 

@*
— выбор всех атрибутов данного шаблона.

□ Если ни одно из предыдущих условий не выполняется, приоритет шаблона равен

0.5
.

Для удобства использования составим таблицу (табл. 5.1) с приоритетами тех или иных паттернов.

Таблица 5.1. Приоритет паттернов

Вид паттерна Приоритет
QName
0
child::QName
@QName
attribute::QName
processing-instruction(литерал)
child::processing-instruction(литерал)
префикс:*
– 0.25
child::префикс:*
@префикс:*
attribute::префикс:*
NodeTest
– 0.5
child::NodeTest
@NodeTest
attribute::NodeTest
Другие паттерны
0.5

Несмотря на то, что вычислением приоритета преобразований занимается процессор, полезно понимать механизм этого вычисления для того, чтобы уметь предсказывать, как будет решен конфликт тех или иных шаблонов. Довольно часто в преобразованиях допускаются ошибки, связанные с приоритетом применения шаблонов.

Пример

Вычислим в качестве упражнения приоритеты шаблонов для следующего примера.

Листинг 5.15. Преобразование

<xsl:stylesheet

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

 xmlns:a="a">

 <xsl:strip-space elements="*"/>

 <!-- Первый шаблон -->

 <xsl:template match="a:b">

<xsl:message>

<xsl:text>1</xsl:text>

<xsl:call-template name="print-name"/>

</xsl:message>

<xsl:apply-templates/>

 </xsl:template>

 <!-- Второй шаблон -->

 <xsl:template match="a:a/a:b">

<xsl:message>

<xsl:text>2</xsl:text>

<xsl:call-template name="print-name"/>

</xsl:message>

<xsl:apply-templates/>

 </xsl:template>

 <!-- Третий шаблон -->

 <xsl:template match="a:*">

<xsl:message>

<xsl:text>3</xsl:text>

<xsl:call-template name="print-name"/>

</xsl:message>

<xsl:apply-templates/>

 </xsl:template>

 <!-- Четвертый шаблон -->

 <xsl:template match="node">

<xsl:message>

<xsl:text>4</xsl:text>

<xsl:call-template name="print-name"/>

</xsl:message>

<xsl:apply-templates/>

 </xsl:template>

 <!-- Пятый шаблон -->

 <xsl:template match="b">

<xsl:message>

  • Читать дальше
  • 1
  • ...
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: