Вот, пожалуй, самый простой пример того, как обрабатывать все xml-файлы в поддереве файловой системы (используя функцию collection()
, реализованную в Saxon):
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="node()|@*" mode="inFile">
<xsl:copy>
<xsl:apply-templates mode="inFile" select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/">
<xsl:apply-templates mode="inFile" select=
"collection('file:///C:/temp?select=*.xml;recurse=yes')"/>
</xsl:template>
</xsl:stylesheet>
При применении к любому документу XML (не используется, игнорируется), это преобразование применяет правило идентификации к каждому документу XML, содержащемуся в любом из *.xml
файлов в поддереве C:/Temp
файловой системы.
Для выполнениядля более тщательной обработки необходимо переопределить шаблон идентификации - в режиме inFile
.
Я полагаю, что в вашем конкретном случае вы можете просто заменить :
<xsl:apply-templates select="/testResults/result/tables/table[14]">
с
<xsl:apply-templates select="./testResults/result/tables/table[14]">
, и это применяет требуемые шаблоны к узлам, выбранным из текущего (документа) узла.