Creating Block-level Content: fo:blockYou use blocks in XSL just as we did in CSSto create a rectangular display area set off from other display areas in a document. You use the fo:block formatting object for formatting such items as paragraphs, titles, headlines, figure and table captions, and so on. Here's an example from the beginning of the chapter: <fo:block font-family="sans-serif" line-height="48pt" font-size="36pt"> Welcome to XSL formatting. </fo:block> You can use these properties with fo:block :
Note that the data in ch14_01.xml is broken up into various child elements of a <PLANET> element, such as < NAME > , <MASS> , and so on, like this: <PLANET COLOR="RED"> <NAME>Mercury</NAME> <MASS UNITS="(Earth = 1)">.0553</MASS> <DAY UNITS="days">58.65</DAY> <RADIUS UNITS="miles">1516</RADIUS> <DENSITY UNITS="(Earth = 1)">.983</DENSITY> <DISTANCE UNITS="million miles">43.4</DISTANCE><!--At perihelion--> </PLANET> In this example, I'll give the data in each of the children of a <PLANET> element its own block in the formatted document. To do that, I add a rule to ch14_02.xsl for each of those children, specifying the font to use for each block: <?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> <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-reference="page"> <fo:flow flow-name="xsl-region-body"> <xsl:apply-templates/> </fo:flow> </fo:page-sequence> </fo:root> </xsl:template> <xsl:template match="PLANET/NAME"> <fo:block font-weight="bold" font-size="36pt" line-height="48pt" font-family="sans-serif"> Name: <xsl:apply-templates/> </fo:block> </xsl:template> <xsl:template match="PLANET/MASS"> <fo:block font-size="36pt" line-height="48pt" font-family="sans-serif"> Mass (Earth = 1): <xsl:apply-templates/> </fo:block> </xsl:template> <xsl:template match="PLANET/DAY"> <fo:block font-size="36pt" line-height="48pt" font-family="sans-serif"> Day (Earth = 1): <xsl:apply-templates/> </fo:block> </xsl:template> <xsl:template match="PLANET/RADIUS"> <fo:block font-size="36pt" line-height="48pt" font-family="sans-serif"> Radius (in miles): <xsl:apply-templates/> </fo:block> </xsl:template> <xsl:template match="PLANET/DENSITY"> <fo:block font-size="36pt" line-height="48pt" font-family="sans-serif"> Density (Earth = 1): <xsl:apply-templates/> </fo:block> </xsl:template> <xsl:template match="PLANET/DISTANCE"> <fo:block font-size="36pt" line-height="48pt" font-family="sans-serif"> Distance (million miles): <xsl:apply-templates/> </fo:block> </xsl:template> </xsl:stylesheet> Now we've handled all the elements in ch14_01.xml, so that completes ch14_02.xsl. You can see the results in Figure 14-1. Congratulations, you've completed your first transformation to XSL formatting objects! |