Используя процессор XSLT 2.0 и функцию collection()
, это действительно просто .
Ниже приведен пример использования Saxon :
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:param name="pDirName" select="'D:/Temp/xmlFilesDelete'"/>
<xsl:template match="/">
<wrap>
<xsl:apply-templates select=
"collection(
concat('file:///',
$pDirName,
'?select=*.xml;recurse=yes;on-error=ignore'
)
)/*
"/>
</wrap>
</xsl:template>
<xsl:template match="*">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
Когда это преобразование применяется к любому документу XML (не используется), он обрабатывает все файлы XML в поддереве файловой системы, начиная с каталога, значение которого определяется глобальным параметром $pDirName
,
На момент применения этого преобразования было только два xml-файла :
<apples>3</apples>
и
<oranges>3</oranges>
Получен правильный результат :
<wrap>
<apples>3</apples>
<oranges>3</oranges>
</wrap>
Это самый простой пример, который можно построить. Чтобы полностью ответить на вопрос, каталог можно указать в командной строке, вызывая Saxon. Подробнее о способах вызова Saxon из командной строки здесь .