Помимо правильных ответов, которые вам нужны для <xsl:include>
или <xsl:import>
(я бы порекомендовал последнее, так как первое часто может приводить к ошибкам дублирования), вашей другой проблемой является следующая :
Имя функции должно принадлежать пространству имен .
Пространство имен должно быть объявлено (определено и связано с префиксом) в том же файле, в котором определена функция.
Любой вызов функции должен содержать префикс имени функции, и этот префикс должен быть связан с тем же пространством имен , которому принадлежит имя функции
Вот простой пример:
I. Файл deleteA.xsl
определяет функцию my:double
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:my="my:my"
>
<xsl:function name="my:double" as="xs:double">
<xsl:param name="pArg" as="xs:double"/>
<xsl:sequence select="2*$pArg"/>
</xsl:function>
</xsl:stylesheet>
II. Файл deleteB.xsl
импортирует файл deleteA.xsl
и использует функцию my:double
:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:my="my:my">
<xsl:import href="deleteA.xsl"/>
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:sequence select="my:double(.)"/>
</xsl:template>
</xsl:stylesheet>
III. Преобразование, содержащееся в deleteB.xsl
, применяется к следующему документу XML :
<t>1</t>
и получается правильный результат :
2
Дополнительный комментарий : В настоящее время ни один браузер не поддерживает преобразования XSLT 2.0 - xsl:function
доступен только в XSLT 2.0 +.