Кариллонатор дал вам первую часть, но часть «поднять логику xsl для чередования двух входов» не очевидна. Вам нужно сделать что-то вроде этого:
<xsl:template match="/">
<xsl:variable name="file1" select="//foo"/>
<xsl:variable name="file2" select="document('c:\temp\myfile.xml')//foo"/>
<output>
<xsl:for-each select="$file1">
<xsl:variable name="pos" select="position()"/>
<xsl:apply-templates select="."/>
<xsl:apply-templates select="$file2[position() = $pos]/>
</xsl:for-each>
<xsl:apply-templates select="$file2[position() > count($file1)"/>
</output>
</xsl:template>
Это чередует преобразование элементов foo
в исходном документе и элементов foo
во втором файле. Если в исходном документе больше foo
элементов, цикл for-each будет выводить их все; если во втором файле их больше, последняя строка вне цикла for-each гарантирует, что они получат вывод.
Если вы хотите, чтобы вывод прекратил копирование, когда закончится один из списков, измените select
в цикле for-each на $file1[not(position() > count($file2))]
и пропустите строку apply-templates
вне цикла for-each.