XSLT — страница 11 из 124

/fo:page-sequence>

Итак, мы успешно создали

planets.fo
. Как нам теперь с его помощью создать форматированный файл PDF?

Создание форматированного документа

Чтобы обработать

planets.fo
и создать форматированный (formatted) документ, я воспользуюсь процессором FOP Джеймса Таубера (James Tauber), который был подарен им проекту Apache XML Project.

Главная страница процессора — http://xml.apache.org/fop; в настоящий момент FOP можно загрузить с http://xml.apache.org/fop/download.html. Пакет FOP, включая документацию, поставляется в формате zip, поэтому сначала его нужно распаковать FOP реализован как JAR-файл Java,

fop.jar
, здесь я буду использовать FOP версии 0.15.

FOP можно запустить из командной строки, используя класс Java, на момент написания книги называвшийся

org.apache.fop.apps.CommandLine
. Нужно предоставить разборщик XML — я буду использовать разборщик Xerces на Java в файле
xerces.jar
(он поставляется вместе с Xalan). Давайте рассмотрим, как в Windows, используя Java, при помощи FOP преобразовать
planets.fo
в
planets.pdf
: в данном случае я указываю переменной
classpath
ключом
-ср
включить файл
xerces.jar
, а также два необходимых JAR-файла, входящих в состав загружаемого пакета FOP —
fop.jar
и
w3c.jar
. (В этом примере предполагается, что все файлы
fop.jar
,
xerces.jar
и
w3c.jar
расположены в каталоге
C:\planets
; если это не так, укажите полные пути к ним.)

C:\planets>java -ср fop.jar:xerces.jar:w3c.jar org.apache.fop apps.CommandLine planets.fo planets.pdf

Получившийся файл,

planets.pdf
, можно просмотреть в средстве чтения файлов PDF Adobe Acrobat Reader, как изображено на рис. 1.8. (Acrobat PDF Reader можно бесплатно загрузить с www.adobe.com/products/acrobat/readermain.html.) Документ
planets.xml
изображен на рисунке отформатированным в соответствии с таблицей стилей
planetsPDF.xsl
.

Рис. 1.8. Документ PDF, созданный при помощи форматирующих объектов 


Формат PDF — хороший формат для вывода форматирующих объектов, хотя он и обладает рядом ограничений — например, он не способен обрабатывать динамические таблицы, которые могут разворачиваться или сворачиваться по щелчку мыши, или интерактивные многоадресные ссылки (а ведь и те, и другие входят в спецификацию форматирующих объектов). Хотя в основных браузерах XSL-FO поддерживается довольно слабо, ожидается, что в будущем ситуация изменится, и браузеры будут поддерживать XSL-FO.

На этом я завершаю наш обзор. Далее в книге мы рассмотрим все вышеперечисленные темы по XSLT, а также вы познакомитесь с введением в XSL-FO. Теперь самое время начать подробно изучать XSLT, — прямо со следующей главы.

Глава 2Создание и применение таблиц стилей

В предыдущей главе был представлен обзор XSLT. В этой главе мы начинаем детальную работу с ним. Мы собираемся научиться рассматривать документы в терминах XSLT, структурировать таблицу стилей XSLT и встраивать в документы таблицы стилей, В этой главе будет дано введение в шаблоны таблиц стилей, которые образуют основу таблиц стилей XSLT. Шаблоны реализуют фактические правила, которые вам требуется применить к данным; более подробно мы рассмотрим их в следующей главе.

Глава открывается систематическим рассмотрением таблиц стилей, и, несомненно, начинать следует с представления документа XML с точки зрения таблицы стилей.

Деревья и узлы

При работе с XSLT следует перестать мыслить в терминах документов и начать — в терминах деревьев. Дерево представляет данные в документе в виде множества узлов — элементы, атрибуты, комментарии и т.д. трактуются как узлы — в иерархии, и в XSLT структура дерева соответствует рекомендации XPath W3C (www.w3.org/TR/xpath). В данной главе мы рассмотрим деревья и узлы концептуально, а в главах 3 и 4 я дам формальное введение в XPath и его связь с XSLT. Выражения XPath, записываемые в терминах деревьев и узлов, используются для поиска данных в XML-документах.

В действительности, в соответствии с рекомендацией XSLT процессоры XSLT не обязаны уметь работать с документами; формально XSLT-преобразования принимают в качестве ввода исходное дерево и производят в качестве вывода результирующее дерево. В большинстве процессоров, тем не менее, существует дополнительная поддержка работы с документами. 

Таким образом, с точки зрения XSLT документы представляют собой образованные из узлов деревья; XSLT распознает семь типов узлов:

• Корневой узел. Это самое начало документа. Этот узел представляет для процессора XSLT весь документ. Важно: не путайте корневой узел с корневым элементом, который также называется элементом документа (подробнее об этом мы поговорим позже в этой главе);

• Узел атрибута. Содержит значение атрибута после того, как были раскрыты ссылки на сущности и отброшены окружающие символы-разделители;

• Узел комментария. Содержит текст комментария, не содержащий символов

и
>
;

• Узел элемента. Состоит из части документа, заключенной в открывающий и соответствующий ему завершающий теги, или единственный пустой элемент-тег, например


;

• Узел пространства имен. Представляет объявление пространства имен. Обратите внимание: этот узел добавляется к каждому элементу, к которому применяется это пространство имен;

• Узел инструкции обработки. Содержит текст инструкции обработки, не содержащий символов

и
?>
. Скажем, объявление
не является инструкцией обработки, несмотря на то, что выглядит таковой. Процессор XSLT отбросит его автоматически;

• Текстовый узел. Текстовые узлы содержат последовательности символов, То есть текст PCDATA. Текстовые узлы по умолчанию в XSLT подвергаются нормализации, то есть смежные текстовые узлы объединяются.

Как мы увидим в главе 7, для работы с деревьями и узлами используются выражения XPath. Выражение XPath возвращает единственный удовлетворяющий выражению узел, или множество узлов, если таких узлов несколько. XPath проектировался как средство навигации по деревьям — и, разобравшись с XPath, вы разберетесь с большей частью XSLT.

Важно помнить следующее: корневой узел дерева XSLT представляет весь документ. Это не то же самое, что корневой элемент. Взгляните, например, на следующий документ — в терминах XSLT корневой узел представляет документ целиком, а корневым элементом является

:

</code></pre></p><p><pre><code>   Earthquakes for Lunch</code></pre></p><p><pre><code>

</code></pre></p><p><pre><code>   Volcanoes for Dinner</code></pre></p><p><pre><code>

Термин корневой элемент (root element) пришёл из рекомендации XML, и, поскольку его легко спутать с корневым узлом (root node) XSLT, пришедшим из рекомендации XPath, некоторые авторы, пишущие на тему XSLT, называют корневой элемент элементом документа. Очень жаль, что существует такое перекрытие терминов.

Вам следует также знать, что процессоры XSLT нормализуют текстовые узлы дерева, то есть объединяют два соседних текстовых узла в один большой текстовый узел для упрощения работы со структурой дерева документа. Поэтому, например, между двумя смежными узлами элементов никогда не будет более одного текстового узла, если изначально между этими узлами элементов располагался только текст.

В XSLT узлы могут иметь имена — так же, как дочерние узлы (child node) и родительские узлы (parent node). Иными словами, узлы элементов, атрибутов, пространств имен и инструкций обработки могут иметь имена; каждый узел элемента и корневой узел могут иметь дочерние узлы; и все узлы, за исключением корневого, имеют родителей.

Например, вот как выглядит рассмотренный нами ранее XML-документ в процессоре XSLT в виде дерева, состоящего из узлов:

                            root

                             |

                    element: 

                             |

                    element: 

                             |

             |-------------------------------|

             |                               |

    element:                 element: <title></code></pre></p><p><pre><code>             |                               |</code></pre></p><p><pre><code>text: "Earthquakes for Lunch" text: "Volcanoes for Dinner"</code></pre></p><p>Как видим, корневой узел расположен на самом верху дерева, за которым следует узел корневого элемента, ему соответствует элемент <pre><code><library></code></pre>. За ним следует узел <pre><code><book></code></pre>, у которого есть два дочерних узла <pre><code><title></code></pre>. Эти два узла <pre><code><title></code></pre> являются внуками элемента <pre><code><library></code></pre>. Родители, дедушки и прадедушки узла, назад до и включая корневой узел, являются<i> предками</i> (ancestor) элемента. Узлы, производные от узла (дети, внуки, правнуки и т.д.), называются его<i> потомками </i>(descendant). Узлы одного уровня называются<i> братьями</i> (sibling).</p><p>При помощи этой модели в виде дерева можно представить любой хорошо сформированный XML-документ. Но XSLT не ограничивается работой только с такими документами. В хорошо сформированных документах должен существовать один элемент, содержащий все остальные, но в соответствии с рекомендацией XSLT это не обязательно. В XSLT корневой узел может иметь столько детей, сколько их может иметь элемент, — например, несколько узлов элементов или текстовых узлов. Таким образом, XSLT может работать с фрагментами документа, а не только с хорошо сформированными документами.</p><div class='cite'><p>ФРАГМЕНТЫ РЕЗУЛЬТИРУЮЩЕГО ДЕРЕВА </p><p>Помимо работы с фрагментами входного дерева, процессоры могут включать в вывод специальный тип данных, в XSLT 1.0 называемый фрагментом результирующего дерева (result tree fragment). Этот тип данных, однако, не был включен в рабочий проект XSLT 1.1 (см. главу 7), поэтому он, скорее всего, не будет входить в состав XSLT 2.0.</p></div><p>В действительности, рассмотренная только что диаграмма дерева не дает полной картины того, как она выглядит с точки зрения процессора XSLT. Я исключил один тип узлов, который вызывает большую путаницу при изучении XSLT — текстовые узлы, содержащие только символ-разделитель (whitespace). Теперь самое время заняться ими.</p><h3 id='46'><span>Символ-разделитель</span></h3><p>Пример XML-документа, с которым мы до сих пор работали, выровнен так, чтобы показать иерархическую структуру его элементов:</p><p><pre><code><?xml version="1.0"?></code></pre></p><p><pre><code><library></code></pre></p><p><pre><code><book></code></pre></p><p><pre><code><title></code></pre></p><p><pre><code>    Earthquakes for Lunch</code></pre></p><p><pre><code>

</code></pre></p><p><pre><code>    Volcanoes for Dinner</code></pre></p><p><pre><code>

Однако, с точки зрения XSLT, символы-разделители, используемые для выравнивания элементов, в действительности являются текстовыми узлами. Это означает, что по умолчанию эти пробелы будут скопированы в выходной документ. Понимание принципов работы XSLT с разделителями всегда вызывает большую путаницу, поэтому мы кратко рассмотрим здесь, как обрабатывать символы-разделители, и подробно займемся этим в следующей главе.

В XSLT существует четыре символа-разделителя: пробел, возврат каретки, перевод строки и табуляция. Все эти символы трактуются как разделители. Таким образом, с точки зрения процессора XSLT, входной документ выглядит так:

.

..</code></pre></p><p><pre><code>...Earthquakes for Lunch</code></pre></p><p><pre><code>..

..</code></pre></p><p><pre><code>...Volcanoes for Dinner</code></pre></p><p><pre><code>..

.

Все разделители между элементами трактуются в XSLT как текстовые узлы, содержащие символ-разделитель. Это означает, что в нашу диаграмму нам нужно добавить пять текстовых узлов с символом-разделителем: один перед элементом

, один после элемента
, и точно так же один перед элементом
</code></pre>, один после и один между элементами:</p><p><pre><code>                                      root</code></pre></p><p><pre><code>                                        |</code></pre></p><p><pre><code>                               element: <library></code></pre></p><p><pre><code>                                        |</code></pre></p><p><pre><code>                    |-------------------|------------|</code></pre></p><p><pre><code>                    |                   |            |</code></pre></p><p><pre><code>              text: whitespace element: <book> text: whitespace</code></pre></p><p><pre><code>                                        |</code></pre></p><p><pre><code>      |-------------------|-------------|-------------------|-------------|</code></pre></p><p><pre><code>      |                   |             |                   |             |</code></pre></p><p><pre><code>text: whitespace element: <title> text: whitespace element: <title> text: whitespace</code></pre></p><p><pre><code>                          |                                 |</code></pre></p><p><pre><code>             text: "Earthquakes for Lunch"   text: "Volcanoes for Dinner"</code></pre></p><p>Такие узлы-разделители, как эти, представляют собой текстовые узлы, не содержащие ничего, кроме символа-разделителя. Поскольку процессоры XSLT по умолчанию сохраняют эти разделители, вас не должно удивлять их появление в результирующих документах. Такие дополнительные разделители обычно не представляют проблемы в документах HTML, XML и XHTML, и здесь в тексте результирующих документов я их не отображаю — для того, чтобы правильно показать выравниванием структуру документа. Мы рассмотрим, как процессоры XSLT могут удалять узлы-разделители из документов, а также как процессоры могут выравнивать результирующие документы. Заметьте, что текстовые узлы, содержащие символы, отличные от символов-разделителей, не считаются узлами-разделителями, поэтому они никогда не будут удалены из документов.</p><p>Следует отметить еще один момент: сами атрибуты трактуются как узлы. Хотя узлы-атрибуты не считаются дочерними узлами тех элементов, в которых они появляются, элемент считается их родительским узлом. (В этом отличие данной модели от модели XML DOM, в которой атрибуты не являются детьми и не имеют родителей.) Если я добавлю атрибут в такой элемент:</p><p><pre><code><?xml version="1.0"?></code></pre></p><p><pre><code><library></code></pre></p><p><pre><code><book></code></pre></p><p><pre><code><title></code></pre></p><p><pre><code>   Earthquakes for Lunch</code></pre></p><p><pre><code>

</code></pre></p><p><pre><code>   Volcanoes for Dinner</code></pre></p><p><pre><code>

то в дереве документа он отобразится следующим образом:

                                    root

                                      |

                               element: 

                                      |

                  |-------------------|------------|

                  |                   |            |

              text: whitespace element:  text: whitespace

                                      |

    |-------------------|-------------|-------------------|-------------|

    |                   |             |                   |             |

text: whitespace element:  text: whitespace element: <title> text: whitespace</code></pre></p><p><pre><code>                        |                                 |</code></pre></p><p><pre><code>       text: Earthquakes for Lunch        |--------------------------|</code></pre></p><p><pre><code>                                          |                          |</code></pre></p><p><pre><code>                            text: Volcanoes for Dinner      attribute: pub_date="2001"</code></pre></p><p>У каждого узла есть ряд установленных свойств, связанных с ним в XSLT. В следующем списке перечислены виды свойств, которые создатели процессоров XSLT отслеживают для каждого узла:</p><p>• <b>Имя</b>. Имя узла;</p><p><b>• Строка-значение</b>. Текст узла;</p><p>• <b>Базовый URI</b>. Базовый URI узла (XML-вариант URL);</p><p>• <b>Дети</b>. Список дочерних узлов; ноль, если детей нет;</p><p>• <b>Родитель</b>. Узел-родитель данного узла;</p><p>• <b>Имеет атрибут</b>. Определяет атрибуты узла элемента, если таковые имеются;</p><p>• <b>Имеет пространство имен</b>. Определяет узлы пространства имен узла-элемента.</p><p>При работе с деревьями следует принять во внимание еще одно соображение; процессоры XSLT работают поверх разборщиков XML, и так как правила для разборщиков XML и процессоров XSLT слегка различаются, это может привести к проблемам. В некоторых случаях данный аспект может быть важен, поэтому в следующем разделе он кратко рассмотрен.</p><h3 id='47'><span>Модель информационного множества против модели дерева XSLT</span></h3></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code></pre><code>

    <div class="pagination">
        
            <a href="/xslt-stiven-holtsner-id349640/read/10/">Предыдущая</a>
        
        <span>Стр. 11 из 124</span>
        
            <a href="/xslt-stiven-holtsner-id349640/read/12/">Следующая</a>
        
    </div>
</main>

<footer>
    <div class="footer-content">
        <div class="center">
            <a href="/contact/">Связь с администрацией</a>
            <a href="/privacy/">Обработка персональных данных</a>
        </div>
    </div>
</footer>

<div id="tocModal">
    <div class="modal-content">
        <h3>Оглавление</h3>
        <p><a href="/xslt-stiven-holtsner-id349640/">К карточке книги</a></p>
        <ul>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/1/#1">
                        Об авторе
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/1/#2">
                        О технических редакторах
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/1/#3">
                        Благодарности
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/1/#4">
                        Введение
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/1/#5">
                        Материал книги
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/2/#6">
                        Для кого предназначена эта книга
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/2/#7">
                        На каком уровне написана книга
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/2/#8">
                        Используемые соглашения
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/2/#9">
                        От издательства
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/2/#10">
                        Глава 1 Основы XSLT
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/2/#11">
                        XSL = XSLT + XSL-FO
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/2/#12">
                        Краткая историческая справка
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/2/#13">
                        Преобразования XSLT-XSL
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/2/#14">
                        XSL-FO: форматирующие объекты XSL
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/2/#15">
                        Спецификации W3C
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/2/#16">
                        Версии XSLT
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/3/#17">
                        Документы XML
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/3/#18">
                        Хорошо сформированные документы XML
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/3/#19">
                        Допустимые документы XML
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/4/#20">
                        Как XML выглядит в браузере?
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/4/#21">
                        XSLT-преобразования
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/4/#22">
                        Что нужно для XSLT-преобразования
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/4/#23">
                        Использование отдельных процессоров XSLT
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/4/#24">
                        Использование процессора XSLT на Java
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/4/#25">
                        XT Джеймса Кларка
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/4/#26">
                        Saxon
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/4/#27">
                        Oracle XSLT
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/4/#28">
                        Xalan
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/5/#29">
                        Преобразование документов XML при помощи браузеров
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/5/#30">
                        Работа с XSLT и JavaScript в Internet Explorer
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/6/#31">
                        XSLT-преобразования на web-серверах
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/6/#32">
                        Преобразования из XML в XML
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/7/#33">
                        Преобразования из XML в XHTML
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/8/#34">
                        Ресурсы XSLT
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/8/#35">
                        Спецификации, руководства и примеры XSLT
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/8/#36">
                        Редакторы XSLT
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/8/#37">
                        Утилиты XSLT
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/9/#38">
                        Форматирующие объекты XSL: XSL-FO
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/9/#39">
                        Ресурсы XSL-FO
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/9/#40">
                        Форматирование документа XML
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/9/#41">
                        Таблица стилей XSLT
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/10/#42">
                        Преобразование документа в представление с форматирующими объектами
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/11/#43">
                        Создание форматированного документа
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/11/#44">
                        Глава 2 Создание и применение таблиц стилей
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/11/#45">
                        Деревья и узлы
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/11/#46">
                        Симв ол-разделитель
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/12/#47">
                        Модель информационного множества против модели дерева XSLT
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/12/#48">
                        Работа с элементами XSLT
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/12/#49">
                        Инструкция обработки < ?xsl:stylesheet? >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/13/#50">
                        Элемент < xsl:stylesheet >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/13/#51">
                        Пространство имен XSL
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/13/#52">
                        Элементы таблиц стилей высокого уровня
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/14/#53">
                        Элемент < xsl:template >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/14/#54">
                        Тела шаблонов
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/14/#55">
                        Инструкции XSLT
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/14/#56">
                        Элементы расширения
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/14/#57">
                        Элементы буквального результата
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/14/#58">
                        Совпадающие элементы в шаблонах
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/15/#59">
                        Элемент < xsl:apply-templates >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/15/#60">
                        Доступ к значениям узлов
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/16/#61">
                        ***
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/17/#62">
                        Поддержка XML Base
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/17/#63">
                        Выбор методов вывода
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/17/#64">
                        Метод вывода: HTML
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/17/#65">
                        Метод вывода: XML
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/17/#66">
                        Метод вывода: текст
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/18/#67">
                        Упрощенные таблицы стилей
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/18/#68">
                        Встроенные таблицы стилей
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/19/#69">
                        Элемент < xsl:include >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/19/#70">
                        Элемент < xsl:import >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/20/#71">
                        Элемент < xsl:apply-imports >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/20/#72">
                        Преобразование документов XML при помощи Internet Explorer
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/21/#73">
                        Глава 3 Создание и применение шаблонов
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/21/#74">
                        Создание шаблона
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/21/#75">
                        Обработка дочерних узлов
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/22/#76">
                        Доступ к значениям узлов
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/22/#77">
                        Создание образцов выбора
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/23/#78">
                        Выбор применяемого шаблона
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/24/#79">
                        Чтение значений атрибутов
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/24/#80">
                        Элемент < xsl:text >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/25/#81">
                        Отключение вывода эскейп-последовательностей
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/26/#82">
                        Написание значений атрибутов
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/26/#83">
                        Шаблоны значений атрибутов
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/27/#84">
                        Обработка символов-разделителей
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/27/#85">
                        Элементы < xsl:strip-space > и < xsl:preserve-space >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/28/#86">
                        Автоматическое выравнивание
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/28/#87">
                        Правила по умолчанию в шаблоне
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/29/#88">
                        Удаление содержимого
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/30/#89">
                        Разрешение конфликтов шаблонов
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/30/#90">
                        Элемент < xsl:copy >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/31/#91">
                        Элемент < xsl:copy-of >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/31/#92">
                        Элемент < xsl:message >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/32/#93">
                        Глава 4 Создание образцов выбора
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/33/#94">
                        Выбор корневого узла
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/33/#95">
                        Выбор элементов
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/33/#96">
                        Выбор дочерних элементов
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/33/#97">
                        Выбор потомков элемента
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/33/#98">
                        Выбор атрибутов
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/33/#99">
                        Формальное определение образцов выбора
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/34/#100">
                        Образцы шага, часть 1: оси образца
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/34/#101">
                        Сокращенный синтаксис
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/35/#102">
                        Образцы шага, часть 2: условия узла
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/35/#103">
                        Выбор комментариев
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/35/#104">
                        Выбор узлов при помощи node()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/35/#105">
                        Выбор текстовых узлов при помощи text()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/35/#106">
                        Выбор инструкций обработки
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/36/#107">
                        Образцы шага, часть 3: предикаты
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/36/#108">
                        Создание предикатов
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/36/#109">
                        Предикаты: наборы узлов
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/36/#110">
                        Предикаты: логические значения
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/36/#111">
                        Предикаты: числа
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/36/#112">
                        Строки
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/36/#113">
                        Предикаты: фрагменты результирующего дерева
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/36/#114">
                        Сокращенный синтаксис предикатов
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/37/#115">
                        Выбор по ID
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/37/#116">
                        Выбор по ключу
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/38/#117">
                        Применение операции Or
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/38/#118">
                        Примеры образцов
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/39/#119">
                        ***
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/40/#120">
                        ***
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/41/#121">
                        Глава 5 Принятие решений и сортировка данных
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/41/#122">
                        Элемент < xsl:if >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/42/#123">
                        Элементы < xsl:choose > , < xsl:when > и < xsl:otherwise >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/43/#124">
                        ***
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/44/#125">
                        ***
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/45/#126">
                        Элемент < xsl:for-each >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/46/#127">
                        Сортирующие элементы
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/46/#128">
                        Сортировка по нескольким критериям
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/47/#129">
                        Элемент < xsl:number >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/47/#130">
                        Одноуровневая нумерация
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/47/#131">
                        Нумерация на произвольных уровнях
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/47/#132">
                        Многоуровневая нумерация
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/48/#133">
                        Расширяемость XSLT
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/48/#134">
                        Функции расширения
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/48/#135">
                        Элемент < xsl:script >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/48/#136">
                        Применение функции function-available
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/48/#137">
                        Внешние объекты
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/49/#138">
                        Элементы расширения
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/49/#139">
                        Применение функции element-available
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/50/#140">
                        Элемент < xsl:fallback >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/50/#141">
                        Глава 6 Преобразование в XML, HTML, XHTML, RTF
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/50/#142">
                        Элемент < xsl:output >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/50/#143">
                        Метод вывода: HTML
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/50/#144">
                        Метод вывода: XML
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/50/#145">
                        Метод вывода: текст
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/50/#146">
                        Вывод в формате XHTML
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/51/#147">
                        Изменение структуры документа на основе входных данных
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/51/#148">
                        Элемент < xsl:element > : создание новых элементов на этапе выполнения
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/52/#149">
                        Элемент < xsl:attribute > : создание новых атрибутов
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/52/#150">
                        Элемент < xsl:comment > : создание комментариев
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/53/#151">
                        Элемент < xsl:processing-instruction > : создание инструкций обработки
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/53/#152">
                        Элемент < xsl:document > : создание нескольких выходных документов
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/54/#153">
                        Элемент < xsl:namespace > : создание объявлений пространств имен
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/54/#154">
                        Элемент < xsl:attribute-set > : создание наборов атрибутов
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/55/#155">
                        Пропуск объявления XML и создание фрагментов XML
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/55/#156">
                        Создание уникальных идентификаторов при помощи generate-id
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/56/#157">
                        Создание разделов CDATA
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/56/#158">
                        Установка кодировки символов
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/57/#159">
                        Режимы: форматирование в зависимости от контекста
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/58/#160">
                        ***
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/59/#161">
                        Глава 7 Работа с XPath
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/59/#162">
                        Изучаем XPath
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/60/#163">
                        Типы данных XPath
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/60/#164">
                        Наборы узлов XPath
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/60/#165">
                        Числа XPath
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/60/#166">
                        Строки XPath
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/60/#167">
                        Логические значения XPath
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/61/#168">
                        Создание путей расположения XPath
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/61/#169">
                        Шаги расположения XPath, часть 1: оси
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/61/#170">
                        Шаги расположения XPath, часть 2: условия узлов
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/62/#171">
                        Шаги расположения XPath, часть 3: предикаты
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/62/#172">
                        Применение осей XPath
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/62/#173">
                        Применение оси ancestor
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/62/#174">
                        Применение оси ancestor-or-self
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/62/#175">
                        Применение оси descendant
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/63/#176">
                        Применение оси descendant-or-self
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/63/#177">
                        Применение оси following
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/64/#178">
                        Применение оси following-sibling
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/64/#179">
                        Применение оси namespace
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/64/#180">
                        Применение оси parent
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/65/#181">
                        Применение оси preceding
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/65/#182">
                        Применение оси preceding-sibling
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/65/#183">
                        Применение оси self
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/66/#184">
                        Примеры путей расположения
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/66/#185">
                        Сокращенный синтаксис XPath
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/67/#186">
                        Проверка выражений XPath
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/67/#187">
                        XPath 2.0
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/67/#188">
                        Глава 8 Работа с функциями XSLT и XPath
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/68/#189">
                        Функции XSLT
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/68/#190">
                        current()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/68/#191">
                        document()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/68/#192">
                        element-available()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/68/#193">
                        format-number()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/68/#194">
                        function-available()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/68/#195">
                        generate-id()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/68/#196">
                        key()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/68/#197">
                        system-property()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/68/#198">
                        unparsed-entity-uri()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/69/#199">
                        Функции XPath для работы с наборами узлов
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/69/#200">
                        count()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/69/#201">
                        id()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/69/#202">
                        last()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/69/#203">
                        local-name()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/69/#204">
                        name()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/69/#205">
                        namespace-uri()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/69/#206">
                        position()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/70/#207">
                        Функции XPath для работы со строками
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/70/#208">
                        concat()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/70/#209">
                        contains()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/70/#210">
                        normalize-space()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/70/#211">
                        starts-with()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/70/#212">
                        string()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/70/#213">
                        string-length()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/70/#214">
                        substring()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/70/#215">
                        substring-after()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/70/#216">
                        substring-before()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/70/#217">
                        translate()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/71/#218">
                        Функции XPath для работы с числами
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/71/#219">
                        ceiling()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/71/#220">
                        floor()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/71/#221">
                        number()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/71/#222">
                        round()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/71/#223">
                        sum()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/72/#224">
                        Логические функции XPath
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/72/#225">
                        boolean()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/72/#226">
                        false()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/72/#227">
                        lang()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/72/#228">
                        not()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/72/#229">
                        true()
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/73/#230">
                        Элемент < xsl:decimal-format > : создание числовых форматов
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/73/#231">
                        Новые функции в XSLT 2.0 и XPath 2.0
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/74/#232">
                        Глава 9 Именованные шаблоны, параметры и переменные
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/74/#233">
                        Элемент < xsl:variable > : создание переменных
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/74/#234">
                        Область видимости переменной
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/74/#235">
                        Работа с переменными
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/75/#236">
                        Элемент < xsl:call-template > : применение именованных шаблонов
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/76/#237">
                        Элементы < xsl:param > и < xsl:with-param > : создание параметров
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/76/#238">
                        Рекурсивный вызов шаблонов
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/76/#239">
                        Шаблон: значение по умолчанию
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/76/#240">
                        Как задавать значения шаблона в командной строке
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/77/#241">
                        Элемент < xsl:key > : выбор по ключу
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/78/#242">
                        ***
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/79/#243">
                        Элемент < xsl:document > : создание нескольких результирующих документов
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/80/#244">
                        Элемент < xsl:namespace-alias > : генерация таблиц стилей
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/81/#245">
                        Глава 10 Работа с API процессоров XSLT
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/81/#246">
                        XSLT и JavaScript в Internet Explorer
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/81/#247">
                        Обработка ошибок разбора
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/82/#248">
                        Internet Explorer и динамические стили
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/83/#249">
                        ***
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/84/#250">
                        Internet Explorer и участки данных XML
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/84/#251">
                        Вызов Java непосредственно из процессоров XSLT
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/85/#252">
                        Работа с API XSLT для Java
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/85/#253">
                        Взаимодействие Xalan с Java
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/86/#254">
                        Взаимодействие Saxon с Java
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/87/#255">
                        Взаимодействие процессора XSLT Oracle с Java
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/88/#256">
                        Взаимодействие XT с Java
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/89/#257">
                        Преобразование XML в реляционную базу данных
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/90/#258">
                        Применение XSLT с активными серверными страницами
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/91/#259">
                        Применение XSLT с Java Server Pages
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/91/#260">
                        Применение XSLT с сервлетами Java
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/91/#261">
                        Глава 11 Применение XSLT для создания документов XSL-FO
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/92/#262">
                        Форматирование XSL
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/92/#263">
                        Форматирующие объекты XSL-FO
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/93/#264">
                        Форматирующие свойства XSL-FO
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/94/#265">
                        ***
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/95/#266">
                        ***
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/96/#267">
                        Форматирование документа XML
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/96/#268">
                        Преобразование в XSL-FO при помощи таблицы стилей XSLT
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/97/#269">
                        ***
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/98/#270">
                        Создание корня документа: < fo:root >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/98/#271">
                        Создание схемы набора шаблонов: < fo:layout-master-set >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/99/#272">
                        Создание шаблона страницы: < fo:simple-page-master >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/99/#273">
                        Создание областей
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/100/#274">
                        Создание последовательностей страниц: < fo:page-sequence >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/100/#275">
                        Создание объектов потока: < fo:flows >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/100/#276">
                        Создание содержимого уровня блока: < fo:block >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/101/#277">
                        ***
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/102/#278">
                        Создание таблиц
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/103/#279">
                        ***
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/104/#280">
                        Создание таблиц: < fo:table >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/104/#281">
                        Создание столбцов таблицы: < fo:table-column >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/104/#282">
                        Создание тел таблицы: < fo:table-body >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/105/#283">
                        Создание строк таблицы: < fo:table-row >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/105/#284">
                        Создание ячеек таблицы: < fo:table-cell >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/106/#285">
                        Глава 12 Документы XSL -FO
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/106/#286">
                        Создание списков XSL-FO
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/106/#287">
                        Создание списка: < fo:list-block >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/106/#288">
                        Создание элементов списка: < fo:list-item >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/106/#289">
                        Создание меток элемента списка: < fo:list-item-label >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/106/#290">
                        Создание тел элементов списка: < fo:list-item-body >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/107/#291">
                        Размещение текста при помощи контейнеров блоков: < fo:block-container >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/108/#292">
                        ***
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/109/#293">
                        Встроенные форматирующие объекты
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/109/#294">
                        Создание встроенных областей: < fo:inline >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/109/#295">
                        Обработка отдельных символов: < fo:character >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/109/#296">
                        Создание номеров страниц: < fo:page-number >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/109/#297">
                        Вставка графики: < fo:external-graphic >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/109/#298">
                        Форматирование первых строк: < fo:initial-property-set >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/110/#299">
                        Создание сносок: < fo:footnote > и < fo:footnote-body >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/111/#300">
                        Создание ссылок: < fo:basic-link >
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/112/#301">
                        Создание колонок
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/112/#302">
                        Последовательности страниц и нумерация страниц
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/113/#303">
                        ***
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/114/#304">
                        ***
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/115/#305">
                        Приложение A DTD XSLT
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/115/#306">
                        Фрагмент DTD для таблиц стилей XSLT
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/116/#307">
                        ***
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/117/#308">
                        Приложение Б Форматирующие свойства XSL-FO
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/118/#309">
                        ***
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/119/#310">
                        ***
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/120/#311">
                        ***
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/121/#312">
                        ***
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/122/#313">
                        ***
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/123/#314">
                        ***
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/124/#315">
                        ***
                    </a>
                </li>
            
                <li>
                    <a href="/xslt-stiven-holtsner-id349640/read/notes/#0">
                        Примечания
                    </a>
                </li>
            
        </ul>
    </div>
</div>


<script src="/static/reader.js"></script>

<!-- Yandex.Metrika counter -->
<script type="text/javascript">
    (function (m, e, t, r, i, k, a) {
        m[i] = m[i] || function () {
            (m[i].a = m[i].a || []).push(arguments)
        };
        m[i].l = 1 * new Date();
        for (var j = 0; j < document.scripts.length; j++) {
            if (document.scripts[j].src === r) {
                return;
            }
        }
        k = e.createElement(t), a = e.getElementsByTagName(t)[0], k.async = 1, k.src = r, a.parentNode.insertBefore(k, a)
    })
    (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");

    ym(103140073, "init", {
        clickmap: true,
        trackLinks: true,
        accurateTrackBounce: true,
        webvisor: true
    });
</script>
<noscript>
    <div><img src="https://mc.yandex.ru/watch/103140073" style="position:absolute; left:-9999px;" alt=""/></div>
</noscript>
<!-- /Yandex.Metrika counter -->

</body>
</html>