Example: Generating Multiple Output Files

The whole point of extensions is to allow you to add new capabilities to the XSLT processor. One of the most common needs is the ability to generate multiple output documents. As we saw earlier, the document() function allows you to have multiple input documents—but XSLT 1.0 doesn’t give us any way to create these. Saxon’s support for XSLT 2.0 includes the <xsl:result-document> element, which lets us generate multiple output documents. Although Xalan doesn’t support XSLT 2.0, it does support an extension element (<redirect:write>) that does the same thing. We’ll look at a stylesheet that uses <xsl:fallback> to generate useful results regardless of the processor we’re using. If we’re using Saxon or Xalan, we’ll get multiple output documents that are hyperlinked together; if we’re using any other processor, we’ll get a single HTML file that contains the same information.

Here’s the source document we’ll use:

<?xml version="1.0"?>
<!-- chapters.xml -->
<book>
  <title>XSLT Topics</title>
  <chapter>
    <title>XPath</title>
    <para>If this chapter had any text, it would appear here.</para>
  </chapter>
  <chapter>
    <title>Stylesheet Basics</title>
    <para>If this chapter had any text, it would appear here.</para>
  </chapter>
...
  <chapter>
    <title>Combining XML Documents</title>
    <para>If this chapter had any text, it would appear here.</para>
  </chapter>
</book>

In addition to the <xsl:fallback> element, our stylesheet also uses the element-available() function to ...

Get XSLT, 2nd 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.