=> Главная База Знаний Xslt Создание списков xsl-fo


Создание списков xsl-fo

Создание списков XSL-FO

Как мы видели в главе 11, таблицы XSL-FO работают во многом так же, как в HTML, и это в той же мере относится к спискам. Как и в HTML, список XSL выводит вертикальный список элементов. Для создания списков служат четыре элемента XSL-FO:

<fo:list-block>
;

<fo:list-item>
;

<fo:list-item-label>
;

<fo:list-item-body>
.

Весь список заключается в элемент

<fo:list-block>
, и каждый элемент списка — в элемент
<fo:list-item>
. Для создания подписи к элементу списка служит элемент
<fo:list-item-label>
, а для вставки данных в каждый элемент списка — элемент
<fo:list-item-body>
.

Пример

lists.xsl
(листинг 12.1) преобразует
planets.xml
в список формата XSL-FO, в котором каждый элемент списка отображает название планеты.

Листинг 12.1. lists.xsl

<?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:simple-page-master master-name="page" page-height="400mm"

     page-width="300mm" margin-top="10mm" margin-bottom="10mm"

     margin-left="20mm" margin-right="20mm">

     <fo:region-body margin-top="0mm" margin-bottom="10mm"

      margin-left="0mm" margin-right="0mm"/>

     <fo:region-after extent="10mm"/>

    </fo:simple-page-master>

   </fo:layout-master-set>

   <fo:page-sequence master-name="page">

    <fo:flow flow-name="xsl-region-body">

     <fo:block font-size="24pt">The Planets Table</fo:block>

     <fo:list-block provisional-distance-between-starts="15mm"

      provisional-label-separation="5mm">

      <xsl:apply-templates/>

     </fo:list-block>

    </fo:flow>

   </fo:page-sequence>

  </fo:root>

 </xsl:template>


 <xsl:template match="PLANET">

  <fo:list-item line-height="20mm">

   <fo:list-item-label>

    <fo:block font-family="sans-serif" font-size="36pt">

     <xsl:number/>

     <xsl:text>. </xsl:text>

    </fo:block>

   </fo:list-item-label>

   <xsl:apply-templates/>

  </fo:list-item>

 </xsl:template>


 <xsl:template match="NAME">

  <fo:list-item-body>

   <fo:block font-family="sans-serif" font-size="36pt">

    <xsl:value-of select='.'/>

   </fo:block>

  </fo:list-item-body>

 </xsl:template>


 <xsl:template match="MASS">

 </xsl:template>


 <xsl:template match="RADIUS">

 </xsl:template>


 <xsl:template match="DENSITY">

 </xsl:template>


 <xsl:template match="DAY">

 </xsl:template>


 <xsl:template match="DISTANCE">

 </xsl:template>

</xsl:stylesheet>

Вот результирующий документ XSL-FO,

lists.fo
(листинг 12.2).

Листинг 12.2. lists.fo

<?xml version="1.0" encoding="UTF-8"?>

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">

 <fo:layout-master-set>

  <fo:simple-page-master margin-right="20mm" margin-left="20mm"

   margin-bottom="10mm" margin-top="10mm" page-width="300mm"

   page-height="400mm" master-name="page">

   <fo:region-body margin-right="0mm" margin-left="0mm"

    margin-bottom="10mm" margin-top="0mm"/>

   <fo:region-after extent="10mm"/>

  </fo:simple-page-master>

 </fo:layout-master-set>

 <fo:page-sequence master-name="page">

  <fo:flow flow-name="xsl-region-body">

   <fo:block font-size="24pt">The Planets Table</fo:block>

   <fo:list-block provisional-label-separation="5mm"

    provisional-distance-between-starts="15mm">

    <fo:list-item line-height="20mm">

     <fo:list-item-label>

      <fo:block font-size="36pt" font-family="sans-serif">

       1.

      </fo:block>

     </fo:list-item-label>

     <fo:list-item-body>

      <fo:block font-size="36pt" font-family="sans-serif">

       Mercury

      </fo:block>

     </fo:list-item-body>

    </fo:list-item>

    <fo:list-item line-height="20mm">

     <fo:list-item-label>

      <fo:block font-size="36pt" font-family="sans-serif">

       2.

      </fo:block>

     </fo:list-item-label>

     <fo:list-item-body>

      <fo:block font-size="36pt" font-family="sans-serif">

       Venus

      </fo:block>

     </fo:list-item-body>

    </fo:list-item>

    <fo:list-item line-height="20mm">

     <fo:list-item-label>

      <fo:block font-size="36pt" font-family="sans-serif">

       3.

      </fo:block>

     </fo:list-item-label>

     <fo:list-item-body>

      <fo:block font-size="36pt" font-family="sans-serif">

       Earth

      </fo:block>

     </fo:list-item-body>

    </fo:list-item>

   </fo:list-block>

  </fo:flow>

 </fo:page-sequence>

</fo:root>
 

Результирующий файл PDF со списком в Adobe Acrobat Reader показан на 1.

Создание списков XSL-FO

1. Список, отформатированный при помощи XSL-FO, в Adobe Acrobat Reader 


Давайте теперь подробнее рассмотрим, как работает

lists.fo
, и изучим форматирующие объекты для списка.