<?xml version='1.0'?>
<xsl:stylesheet
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
xmlns:fo='http://www.w3.org/1999/XSL/Format'
version='1.0'>
<xsl:template match='PLANETS'>
<fo:root xmlns:fo='http://www.w3.org/1999/XSL/Format'>
<fo:layout-master-set>
.
.
.
</fo:layout-master-set>
<fo:page-sequence master-name='page'>
<fo:flow flow-name='xsl-region-body'>
<fo:block font-weight='bold' font-size='36pt'
line-height='48pt' font-family='Times' color='blue'>
The Planets Table
</fo:block>
<xsl:apply-templates/>
</fo:flow>
</fo:page-sequence>
.
.
.
Этот код создаст блок заголовка, который показан в верхней части текста на рис. 11.1. Таким способом я могу создать аналогичные блоки для каждого элемента данных каждой планеты при помощи таблицы стилей XSLT. Заметьте также, что я вывожу имя каждой планеты курсивом, установив свойство font-style
в «italic», и я подчеркиваю остальной текст при помощи свойства text- decoration
элементов <fo:inline>
, которые мы рассмотрим в следующей главе:
<?xml version='1.0'?>
<xsl:stylesheet
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
xmlns:fo='http://www.w3.org/1999/XSL/Format'
version='1.0'>
<xsl:template match='PLANETS'>
<fo:root xmlns:fo='http://www.w3.org/1999/XSL/Format'>
<fo:layout-master-set>
.
.
.
</fo:layout-master-set>
<fo:page-sequence master-name='page'>
.
.
.
</fo:page-sequence>
</fo:root>
</xsl:template>
<xsl:template match='PLANET/NAME'>
<fo:block font-weight='bold' font-size='28pt'
line-height='48pt' font-family='Times' font-style='italiс'>
Planet:
<xsl:apply-templates/>
</fo:block>
</xsl:template>
<xsl:template match='PLANET/MASS'>
<fo:block font-size='24pt' line-height='32pt' font- family='Times'>
<fo:inline text-decoration='underline'>
Mass
</fo:inline>:
<xsl:apply-templates/>
[Earth = 1]
</fo:block>
</xsl:template>
.
.
.
</xsl:stylesheet>
Вот и все. Вы создали свое первое преобразование из XML в XSL-FO, преобразовав planets.xml
в planets.fo
. Процессор fop создаст из planets.fo
файл planets.pdf
, и вы можете вернуться к рис. 11.1 и посмотреть на результат.
Это преобразование форматировало данные в planets.xml
и отображало их в блоках, одно за другим. С другой стороны, в предыдущих главах мы видели данные планет в виде таблицы. Можно ли это сделать в XSL-FO? Никаких проблем.
Создание таблиц
Таблица — одна из самых полезных структур, которые можно форматировать при помощи XSL-FO. Таблица в XSL-FO во многом похожа на таблицу в HTML: это прямоугольная сетка, состоящая из строк и столбцов ячеек. Для создания таблиц можно применять девять форматирующих элементов.
• <fo:table-and-caption>
;
• <fo:table>
;
• <fo:table-column>
;
• <fo:table-caption>
;
• <fo:table-header>
;
• <fo:table-footer>
;
• <fo:table-body>
;
• <fo:table-row>
;
• <fo:table-cell>
.
Создание таблиц в XSL-FO аналогично их созданию в HTML. Вы создаете элемент <fo:table>
, содержащий всю таблицу целиком, затем форматируете каждый столбец при помощи элемента <fo:table-column>
. После чего вы создаете элемент <fo:table-body>
, чтобы задать тело таблицы. Элемент <fo:table-