Вот лишь небольшой пример того, что вы могли бы сделать:
file1.xml:
<foo>
<bar>Text from file1</bar>
</foo>
file2.xml:
<foo>
<bar>Text from file2</bar>
</foo>
index.xml:
<index>
<filename>file1.xml</filename>
<filename>file2.xml</filename>
summarize.xsl:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl">
<xsl:variable name="big-doc-rtf">
<xsl:for-each select="/index/filename">
<xsl:copy-of select="document(.)"/>
</xsl:for-each>
</xsl:variable>
<xsl:variable name="big-doc" select="exsl:node-set($big-doc-rtf)"/>
<xsl:template match="/">
<xsl:element name="summary">
<xsl:apply-templates select="$big-doc/foo"/>
</xsl:element>
</xsl:template>
<xsl:template match="foo">
<xsl:element name="text">
<xsl:value-of select="bar"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Применение таблицы стилей к index.xml дает вам:
<?xml version="1.0" encoding="UTF-8"?><summary><text>Text from file1</text><text>Text from file2</text></summary>
Хитрость заключается в том, чтобы загружать различные документы с помощью функции документа (функции расширения, поддерживаемой почти всеми процессорами XSLT 1.0), выводить содержимое как часть тела переменной, а затем преобразовывать переменную в набор узлов для дальнейшего обработка.