Весьма часто во время преобразования требуется создать несколько результирующих документов. Например, вам может понадобиться создать отчет о прохождении преобразования или разделить входной документ на несколько результирующих документов (например, разбить рассказ на главы). Или же вам может быть нужно создать набор результирующих документов, которые будут использоваться (как при создании кадрового (frameset) документа HTML) совместно с двумя документами, отображаемыми во фреймах.
Создание нескольких результирующих документов настолько распространенная задача, что практически все процессоры XSLT позволяют вам это сделать, даже в XSLT 1.0, где отсутствуют необходимые для этого средства. Процессоры XSLT добавляют для этого новые элементы расширения. Например, Xalan предоставляет элемент
<write>
, позволяющий написать новый результирующий документ. Для работы с этим элементом нужно создать новый префикс пространства имен — здесь я использую «xalan» — которое Xalan использует для элемента, «com.lotus.xsl.extensions.Redirect», и указать, что этот новый префикс является префиксом элемента расширения:
<?xml version="1.0"?>
<xsl:stylesheet version="1.1"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xalan="com.lotus.xsl.extensions.Redirect"
extension-element-prefixes="xalan">
.
.
.
Теперь
при помощи атрибута
file
элемента
<xalan:write>
можно записать новый файл:
<?xml version="1.0"?>
<xsl:stylesheet version="1.1"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xalan="com.lotus.xsl.extensions.Redirect"
extension-element-prefixes="xalan">
.
.
.
<xalan:write file="newdoc.txt">
<xsl:text>Here's some text.</xsl:text>
</xalan:write>
В процессоре Saxon применяйте элемент
<output>
. Для этого элемента я использую префикс «saxon», который соответствует URI «http://icl.com/saxon»:
<?xml version="1.0"?>
<xsl:stylesheet version="1.1"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:saxon="http://icl.com/saxon"
extension-element-prefixes="saxon">
.
.
.
<saxon:output file="newdoc.txt">
<xsl:text>Here's some text.</xsl:text>
</saxon:output>
To же можно сделать и в XT; в этом случае используйте пространство имен <http://www.jclark.com/xt» с элементом