Flowing Content into the Pages

Next, add an fo:flow child to the fo:page-sequence where the actual text of the transformed document appears. This element has a flow-name attribute specifying which region of the page its content will flow into. Possible values include xsl-region-body, xsl-region-start, xsl-region-end, xsl-region-before, and xsl-region-after.

The formatter instantiates a page based on the page master named by the fo:page-sequence’s master-reference attribute, fills one of its regions with content from the fo:flow element until the page is full, then instantiates a second page, fills it with more content from the fo:flow, instantiates a third page, and continues this process until it’s used up all the data in the fo:flow.

The fo:flow element must contain block-level formatting object elements. The most basic of these is fo:block. Others include fo:block-container, fo:list-block, fo:table, and fo:table-and-caption. We’ll begin with the most basic, fo:block. A fo:block can contain a combination of raw text and formatting objects, such as fo:external-graphic, fo:inline, fo:page-number, fo:footnote, and even other fo:block elements. For the moment, we’ll restrict ourselves to simple text. For example, here’s a basic fo:flow for the recipe:

<fo:flow flow-name="xsl-region-body">
  <fo:block>Southern Corn Bread</fo:block>
     
  <fo:block>1 cup flour</fo:block>
  <fo:block>4 tablespoons Royal Baking Powder</fo:block>
  <fo:block>1/2 teaspoon salt</fo:block> <fo:block>1 cup corn meal</fo:block> ...

Get XML in a Nutshell, 3rd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.