Да, это возможно, но не ясно, что это полезный подход. Какую информацию в схеме вы собираетесь использовать для генерации XSLT? Вам нужно привести несколько примеров конструкций, которые вы найдете в схеме, и результирующие правила XSLT, которые вы хотите сгенерировать.
Есть два других варианта, которые вы должны рассмотреть:
(a) написание полностью универсальной таблицы стилей XSLT, которая обрабатывает любой документ независимо от его схемы. Например, он может содержать такие правила:
<xsl:template match="*[count(*)>1 and count(*)=count(distinct-values(*/node-name())]">
<table>
<xsl:for-each select="*">
<tr>
<td><xsl:value-of select="name()"/></td>
<td><xsl:apply-templates/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
Это правило гласит, что если вы встретите элемент с 2 или более дочерними элементами, и у всех дочерних элементов есть разные имена, то отобразите таблицу, содержащую имена элементов в одном столбце и их значения в другом.
(b) написание общей таблицы стилей с поддержкой схемы (XSLT 2.0), которая обрабатывает любой входной документ, но использует информацию схемы из аннотаций типов на проверенных узлах, чтобы решить, какой вывод генерировать. Например, у вас может быть такое правило:
<xsl:template match="@*[data(.) instance of xs:decimal]">
<xsl:value-of select="format-number(., '#,00', 'continental')"/>
</xsl:template>
, при котором все значения десятичных атрибутов отображаются в таком формате, как 3,14
.