Вот как это можно сделать с помощью функции unparsed-text()
XSLT 2.0:
D:\MiLu\Dev\XML :: more > eins.txt
Ich bin die eins.
^Z
D:\MiLu\Dev\XML :: more > zwei.txt
Ich bin die zwei.
^Z
D:\MiLu\Dev\XML :: saxon unparsed-text.xml unparsed-text.xsl
<?xml version="1.0" encoding="UTF-8"?>
<eins>
<zwei> bla </zwei>
<drei>Ich bin die eins.

</drei>
<vier>Ich bin die zwei.

</vier>
</eins>
D:\MiLu\Dev\XML :: more /t1 unparsed-text.xml
<eins>
<zwei> bla </zwei>
<drei>
<textfile href="eins.txt"/>
</drei>
<vier>
<textfile href="zwei.txt"/>
</vier>
</eins>
D:\MiLu\Dev\XML :: more /t1 unparsed-text.xsl
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="textfile[ @href ]">
<xsl:copy-of select="unparsed-text( @href )"/>
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Для XSLT 1.0 вам потребуется обходной путь, включающий файл-оболочку XML, ссылающийся на текстовый файл с использованием внешней сущности, и функцию document()
.