Вызов шаблонных правил
Вызов шаблонных правил
Рассмотрим следующий простой пример.
Листинг 5.1. Входящий документ
<para><bold>text</bold></para>
Попробуем написать пару шаблонов, которые будут изменять имена элементов para и bold на p и b соответственно. Сначала напишем преобразование для bold:
<xsl:template match="bold">
<b><xsl:value-of select="."/></b>
</xsl:template>
В этом правиле создается элемент b, в который включается текстовое значение текущего узла (то есть, обрабатываемого элемента bold). Применив это преобразование к входящему документу, мы получим следующий результат:
<b>text</b>
Как говорят математики, что и требовалось. Попробуем проделать тот же трюк с элементом para и создадим преобразование, включающее оба правила.
Листинг 5.2. Преобразование с para и bold — версия 1
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="bold">
<b><xsl: value-of select="."/></b>
</xsl:template>
<xsl:template match="para">
<p><xsl:value-of select="."/></p>
</xsl:template>
</xsl:stylesheet>
На этот раз вместо ожидаемого результата вида <p><b>text</b></p> мы получим
<p>
text
</p>
Попробуем ответить на три вопроса: кто виноват, что делать и куда делся элемент b.
Для ответа на вопрос, куда делся элемент b, пожалуй, необходимо будет пояснить, что же именно происходит при преобразовании этого документа. Последовательно рассмотрим стадии этого процесса.
? Процессор начинает обработку с корневого узла дерева. Он выбирает шаблон, соответствующий этому узлу. В нашем преобразовании такого шаблона нет, значит, процессор применит к корню шаблонное правило, определенное по умолчанию (см. раздел "Встроенные шаблоны" данной главы).
? По умолчанию шаблонное правило корневого узла обрабатывает все дочерние узлы. В нашем документе единственным дочерним узлом корня будет элемент para.
? Для элемента para в нашем преобразовании задан шаблон, который и будет применен к этому элементу.
? В соответствии с этим шаблоном, процессор создаст элемент p и включит в него текстовое значение выражения ".". Как мы знаем, выражение "." является сокращенной формой выражения "self::node()", которое возвратит текущий узел. Таким образом, элемент <xsl:value-of select="."/> вычислит и возвратит строковое значение текущего узла, то есть узла para. Строковым значением элемента является конкатенация всех его текстовых потомков. Единственным текстовым потомком нашего para является текстовый узел со значением "text" и вот он-то и выводится между открывающим и закрывающим тегами созданного элемента p.
Таким образом, элемент b "потерялся" потому, что шаблон для bold просто не вызывался. Виноваты, естественно, мы сами, поскольку не включили его вызов. Осталось только разобраться, как можно вызвать шаблон для обработки элемента bold.
Ответ на этот вопрос предельно прост — для вызова неименованных шаблонных правил В XSLT используется элемент xsl:apply-templates.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
По 10 правил и юнитов
По 10 правил и юнитов Здесь собрана «лучшая десятка» наиболее интересных и полезных правил (политик) учета трафика, и 10 описаний различных юнитов. Этот документ поможет вам а) лучше понять механизм работы netams и б) наиболее правильным образом создать ваш конфигурационный
Определение правил
Определение правил Для создания правил используется опция --append (или -А) программы iptables. После этой опции задается один или несколько критериев, затем указывается опция --jump (или -j), за которой следует действие ACCEPT, DROP или REJECT. Вызов iptables, предназначенный для создания
19.5. Цепочки правил
19.5. Цепочки правил Ядро стартует с тремя списками правил: input, forward, output. Эти правила называются firewall-цепочками или просто цепочками. Цепочка — это набор правил вида «заголовок пакета: действие». Если заголовок пакета соответствует заголовку, указанному в правиле,
A.1. Вывод списка правил
A.1. Вывод списка правил Чтобы вывести список правил нужно выполнить команду iptables с ключом L, который кратко был описан ранее в главе Как строить правила. Выглядит это примерно так:iptables -LЭта команда выведет на экран список правил в удобочитаемом виде. Номера портов будут
Специализация шаблонных функций – членов шаблонного класса
Специализация шаблонных функций – членов шаблонного класса К сожалению, вышеприведенный код не будет компилироваться на компиляторах, не поддерживающих специализацию шаблонов-функций – членов шаблонов классов.ПРИМЕЧАНИЕ К таким относятся, например, gcc-2.95 и gcc-2.96
Настройка правил для приложений
Настройка правил для приложений Тоньше всего можно настроить работу модуля Сетевой экран с помощью правил. В поставку включен набор правил для наиболее известных приложений, сетевая активность которых проанализирована специалистами и которые имеют четкое определение
R.10.4 Сводка правил области видимости
R.10.4 Сводка правил области видимости Теперь можно свести воедино правила областей видимости для программы на C++. Эти правила одинаково применимы для всех имен (включая имя-typedef (§R.7.1.3) и имя-класса (§R.9.1)) и в любом контексте, для которого они допустимы по синтаксису языка.
10.7. Нарушение правил
10.7. Нарушение правил Описанные в данной главе соглашения не абсолютны, но их нарушение в будущем усугубить разногласия между пользователями и разработчиками. В случае крайней необходимости их можно нарушить, однако, прежде чем это сделать, необходимо точно знать, для
Правило 43: Необходимо знать, как обращаться к именам в шаблонных базовых классах
Правило 43: Необходимо знать, как обращаться к именам в шаблонных базовых классах Предположим, что нам нужно написать программу, которая будет посылать сообщения нескольким компаниям. Сообщения должны отправляться как в зашифрованной форме, так и в форме открытого
10.7. Нарушение правил
10.7. Нарушение правил Описанные в данной главе соглашения не абсолютны, но их нарушение в будущем усугубить разногласия между пользователями и разработчиками. В случае крайней необходимости их можно нарушить, однако, прежде чем это сделать, необходимо точно знать, для
Преобразование как набор правил
Преобразование как набор правил В предыдущих главах мы уже упомянули о том, что преобразование в XSLT состоит не из последовательности действий, а из набора шаблонных правил, каждое из которых обрабатывает свою часть XML-документа. Эта глава целиком посвящена вопросам
1.3. Рекурсивное определение правил
1.3. Рекурсивное определение правил Давайте добавим к нашей программе о родственных связях еще одно отношение — предок. Определим его через отношение родитель. Все отношение можно выразить с помощью двух правил. Первое правило будет определять непосредственных
18.4.5. Прием потока ввода без применения шаблонных команд
18.4.5. Прием потока ввода без применения шаблонных команд После шаблонной части необязательно указывать команды; если после шаблонной части команды отсутствуют, до перехода к дальнейшей обработке выполняется фильтрация нежелательных откликов.Если в отдел учета следует
Пять правил
Пять правил Из рассмотренных критериев следуют пять правил, которые должны соблюдаться, чтобы обеспечить модульность:[x]. Прямое отображение (Direct Mapping). [x]. Минимум интерфейсов (Few Interfaces). [x]. Слабая связность интерфейсов (Small interfaces - weak coupling). [x]. Явные интерфейсы (Explicit Interfaces). [x].