» Xml для новичков
» Главная страница
»
К оглавлению
Фильтрация элементов
Одним из самых мощных средств XSL является возможность
сортировки и выборки элементов, выделяемых из общего дерева элементов документа.
Для этого используется элемент <select-elements>;, который
заменяет <children/> в правилах, определяя те элементы, которые следует
обработать в процессе рекурсивного обхода. Например, в следующем примере будут
обработаны только элементы <author>: <rule>
<target-element type=" staff"/>
<div>
<select-elements>
<target-element type = "author"/>
</select-elements>
</div>
</rule>
Элемент <select-elements> сам по себе не определяет
шаблон форматирования, он лишь управляет работой анализатора, обозначая, подобно
<children/>, "нижележащие" элементы. В приведенном примере элемент
<author> должен быть расположен внутри элемента <staff>
Для того, чтобы в шаблоне выделить не только собственные
дочерние элементы, но и дочерние элементы потомков, т.е. использовать несколько
уровней вложенности, необходимо задать параметр from = "descendants". Если
параметр имеет значение "children", что указывает на то, что выбор должен
производится из списка собственных дочерних элементов, то атрибут from может
опускаться, т.к. "children" является значением по умолчанию. Правила
стилей
В отличие от CSS, в XSL невозможно использование каскадных
стилевых определений(т.е. нельзя использовать несколько правил для определения
стиля одного того же элемента), т.к. такие ограничения вводит рекурсивный
алгоритм работы программы - анализатора. Однако использование правил определения
стиля(Style Rules) элемента позволяет каким-то образом скомпенсировать этот
недостаток.
Для определения правила стилевого оформления необходимо
воспользоваться элементом <style-rule>;, который используется
точно также, как и <rule>, но инструкции, содержащиеся в нем, никак не
влияют на структуру выходного документа. Поэтому все команды внутри этого
правила должны описываться в рамках элемента <apply>. Вот как будет
выглядеть, например, определение стиля для элемента
<flower>rose</flower>;: <style-rule>
<target-element type ="flower"/>
<apply color ="red"/>
</style-rule>
<rule>
<target-element type="flower"/>
<div font-style="italic";>
<children/>
</div>
</rule>
Если бы мы не определили правила <rule>, то в выходной
документ не было бы помещено никакой информации, т.к. элемент <style-rule>
только определяет параметры стилевого оформления, не предпринимая никаких других
действий.
Также надо учитывать, что XSL- анализатор использует CSS для
определения задаваемого правилами <style-rule> стиля в выходном
HTML-документе, тем самым предоставляя нам возможность использования этого
мощного средства при оформлении HTML-страниц После обработки приведенного в
примере фрагмента в выходной документ будут помещены следующие элементы: <div style= "font-style: italic; color : red;"
>rose</div>
Еще один пример:
Стили в формате CSS: issue {font-weight=bold; color=blue;}
.new {font-weight=bold; color=red;}
Фрагмент XSL- документа, позволяющего использовать подобные
стилевые определения: <style-rule>
<target-element type ="issue"/>
<apply color ="blue"/>
</style-rule>
<style-rule>
<target-element type ="issue">
<attribute name ="class" value ="new" />
</target-element>
<apply color ="red"/>
</style-rule>
<rule>
<target-element type="issue"/>
<div>
<children/>
</div>
</rule>
Следующий
урок
|