Поскольку xsl:include
или xsl:import
должны быть дочерними по отношению к xsl:stylesheet
, вы не сможете управлять ими условно.
Может быть, будет лучше, если вы включите обе таблицы в основной, а затем вызовете соответствующий шаблон на основе вашего выбора.
Пример:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:include href="win.xsl"/>
<xsl:include href="unix.xsl"/>
<xsl:template match="/">
<xsl:choose>
<xsl:when test="contains(//osinfo/@information, 'Windows')">
<xsl:call-template name="winsystem"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="unixsystem"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Очевидно, что это всего лишь предложение, и оно основано на наличии двух шаблонов с именами win и unix на двух разных таблицах стилей с именами win.xsl и unix.xsl.
Надеюсь, это поможет
Расширенный ответ после просмотра шаблонов
Я бы назвал два шаблона по-разному и удалил match
. Я имею в виду, я бы использовал:
unix xsl
<xsl:template name="unixsystem">
<!-- your staff -->
</xsl:template>
windows xsl
<xsl:template name="winsystem">
<!-- your staff -->
</xsl:template>
После этого вы можете вызывать шаблоны, как указано выше. Обратите внимание, что я удалил match
. Таким образом, вы сможете вызывать шаблоны. Я не исследовал, правильно ли содержимое ваших файлов xsl. Я также исправил неправильный код (нераскрытый xsl:choose
) в моем xsl.