KnigaRead.com/

Стивен Холзнер - XSLT

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Стивен Холзнер, "XSLT" бесплатно, без регистрации.
Перейти на страницу:

 <PLANET COLOR="BLUE">

  <NAME>Earth</NAME>

  <MASS UNITS="(Earth = 1)">1</MASS>

  <DAY UNITS="days">1</DAY>

  <RADIUS UNITS="miles">2107</RADIUS>

  <DENSITY UNITS="(Earth = 1)">1</DENSITY>

  <DISTANCE UNITS="million miles">128.4</DISTANCE><!--B перигелии-->

 </PLANET>

</PLANETS>

В этом первом примере я создам таблицу стилей XSLT для форматирования файла planets.xml и преобразования его в planets.fo, использующую форматирующие объекты для задания шрифтов, стилей и цветов. Затем я воспользуюсь процессором fop и преобразую planets.fo в файл planets.pdf, который показан на рис. 11.1.

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


Как видно на рис. 11.1, в нашем первом примере я применил средства форматирования текста: установку шрифта, подчеркивание текста, выделение текста курсивом и даже установка цвета текста. (Хотя этого и не видно на рис. 11.1, заголовок «The Planets Table» выделен светло-голубым цветом.)

Первый шаг при создании документа на рис. 11.1 — применить таблицу стилей XSLT для преобразования planets.xml в planets.fo.

Преобразование в XSL-FO при помощи таблицы стилей XSLT

В этой главе я создам таблицу стилей для преобразования planets.xml в planets.fo. Я буду создавать таблицу шаг за шагом; для справки я приведу ее окончательный вид (листинг 11.2).

Листинг 11.2. planets.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-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>

  </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="italic">

   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:template match="PLANET/DAY">

  <fo:block font-size="24pt" line-height="32pt"

   font-family="Times">

   <fo:inline text-decoration="underline">

    Day

   </fo:inline>:

   <xsl:apply-templates/>

   [Earth = 1]

  </fo:block>

 </xsl:template>


 <xsl:template match="PLANET/RADIUS">

  <fo:block font-size="24pt" line-height="32pt"

   font-family="Times">

   <fo:inline text-decoration="underline">

    Radius

   </fo:inline>:

   <xsl:apply-templates/>

   miles

  </fo:block>

 </xsl:template>


 <xsl:template match="PLANET/DENSITY">

  <fo:block font-size="24pt" line-height="32pt"

   font-family="Times">

   <fo:inline text-decoration="underline">

    Density

   </fo:inline>:

   <xsl:apply-templates/>

   [Earth = 1]

  </fo:block>

 </xsl:template>


 <xsl:template match="PLANET/DISTANCE">

  <fo:block font-size="24pt" line-height="32pt"

   font-family="Times">

   <fo:inline text-decoration="underline">

    Distance

   </fo:inline>:

   <xsl:apply-templates/>

   million miles

  </fo:block>

 </xsl:template>

</xsl:stylesheet>

После применения этой таблицы стилей для преобразования planets.xsl будет получен файл planets.fo, который при помощи форматирующих объектов XSL-FO создает документ с видом, показанным на рис. 11.1. Вот как выглядит planets.fo (листинг 11.3).

Листинг 11.3. planets.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 color="blue" font-family="Times"

    line-height="48pt" font-size="36pt" font-weight="bold">

    The Planets Table

   </fo:block>

   <fo:block font-style="italic" font-family="Times"

    line-height="48pt" font-size="28pt" font-weight="bold">

    Planet:

    Mercury

   </fo:block>

   <fo:block font-family="Times" line-height="32pt" font-size="24pt">

    <fo:inline text-decoration="underline">

     Mass

    </fo:inline>:

    .0553

    [Earth = 1]

   </fo:block>

   <fo:block font-family="Times" line-height="32pt" font-size="24pt">

    <fо:inline text-decoration="underline">

     Day

    </fo:inline>:

    58.65

    [Earth = 1]

   </fo:block>

   <fo:block font-family="Times" line-height="32pt" font-size="24pt">

    <fo:inline text-decoration="underline">

     Radius

    </fo:inline>:

    1516

    miles

   </fo:block>

   <fo:block font-family="Times" line height="32pt" font-size="24pt">

    <fo:inline text-decoration="underline">

     Density

    </fo:inline>:

    .983

    [Earth = 1]

   </fo:block>

   <fo:block font-family="Times" line-height="32pt" font-size="24pt">

    <fo:inline text-decoration="underline">

     Distance

    </fo:inline>:

    43.4

    million miles

   </fo:block>

   <fo:block font-style="italic" font-family="Times" line-height="48pt"

    font-size="28pt" font-weight="bold">

    Planet:

    Venus

   </fo:block>

   <fo:block font-family="Times" line-height="32pt" font-size="24pt">

    <fo:inline text-decoration="underline">

     Mass

    </fo:inline>:

    .815

    [Earth = 1]

   </fo:block>

   <fo:block font-family="Times" line-height="32pt" font-size="24pt">

    <fo:inline text-decoration="underline">

     Day

    </fo:inline>:

    116.75

    [Earth = 1]

   </fo:block>

   <fo:block font-family="Times" line-height="32pt" font-size="24pt">

    <fo:inline text-decoration="underline">

     Radius

    </fo:inline>:

    3716

    miles

   </fo:block>

   <fo:block font-family="Times" line-height="32pt" font-size="24pt">

    <fo:inline text-decoration="underline">

     Density

    </fo:inline>:

    .943

    [Earth = 1]

   </fo:block>

   <fo:block font-family="Times" line-height="32pt" font-size="24pt">

    <fo:inline text-decoration="underline">

     Distance

    </fo:inline>:

    66.8

    million miles

   </fo:block>

   <fo:block font-style="italic" font-family="Times" line-height="48pt"

    font-size="28pt" font-weight="bold">

    Planet:

    Earth

   </fo:block>

   <fo:block font-family="Times" line-height="32pt" font-size="24pt">

    <fo:inline text-decoration="underline">

     Mass

    </fo:inline>:

    1

    [Earth = 1]

   </fo:block>

   <fo:block font-family="Times" line-height="32pt" font-size="24pt">

    <fo:inline text-decoration="underline">

     Day

    </fo:inline>:

    1

    [Earth = 1]

   </fo:block>

   <fo:block font-family="Times" line-height="32pt" font-size="24pt">

    <fo:inline text-decoration="underline">

     Radius

    </fo:inline>:

    2107

    miles

   </fo:block>

   <fo:block font-family="Times" line-height="32pt" font-size="24pt">

    <fo:inline text-decoration="underline">

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*