Во-первых, я не думаю, что от применения apply-templates можно что-то выиграть, если только не происходит какая-то динамическая отправка.Например, если бы у вас были и .txt URI, и .xml URI, вы могли бы сделать
<xsl:apply-templates select="uri-collection(....)" mode="dereference"/>
<xsl:template match=".[ends-with(., '.txt')]" mode="dereference">
--- process unparsed text file ----
</xsl:template>
<xsl:template match=".[ends-with(., '.xml')]" mode="dereference">
--- process XML file ----
</xsl:template>
<xsl:template match="." mode="dereference"/>
Но если все они обрабатываются одинаково, тогда xsl: for-each отлично справляется со своей задачей.
Я ответил на ваш второй вопрос, используя "."как образец, который соответствует всему (включая атомарные значения).Шаблон "*" будет соответствовать только узлам элемента.