Использование динамического href в XSLT import / include? - PullRequest
2 голосов
/ 25 марта 2012

Элементы <xsl:import> и <xsl:include> ведут себя довольно специфично.Что я пытаюсь сделать:

<xsl:import href="{$base}/themes/{/settings/active_theme}/styles.xsl" />

Я хочу разрешить загрузку различных тем для моего приложения.У меня есть настройки в моем приложении, которые хранят имя папки «в настоящее время активная тема» в узле xml.К сожалению, приведенный выше код не будет работать.Кто-нибудь знает об обходном пути для достижения того, что я хочу сделать?

edit: только что подтвержденный гуру XSLT через Twitter ... нет хорошего способа сделать это.Самым простым решением в моем случае, вероятно, будет разделение таблиц стилей внешнего интерфейса и внутреннего интерфейса и их индивидуальная загрузка в XSLTProcessor ...

Ответы [ 2 ]

1 голос
/ 26 марта 2012

xsl: импорт собирает таблицу стилей перед выполнением. Таблица стилей не может изменить себя во время выполнения, чего вы и пытаетесь достичь.

Если у вас есть три варианта таблицы стилей для использования в различных обстоятельствах, представленные тремя модулями A.xsl, B.xsl и C.xsl, то вместо попытки импортировать один из них в модуль common.xsl, который содержит весь общий код, вам нужно инвертировать структуру: каждый из A.xsl, B.xsl и C.xsl должен импортировать common.xsl, и вы должны выбрать A.xsl, B.xsl или C.xsl как основной модуль таблицы стилей при запуске преобразования.

1 голос
/ 25 марта 2012

Что я пытаюсь сделать:

<xsl:import href="{$base}/themes/{/settings/active_theme}/styles.xsl" />

Это запрещено в любой версии (1.0, 2.0 или 3.0) XSLT .

В XSLT 2.0 (и выше) можно использовать атрибут use-when, но условия, которые могут быть указаны, очень ограничены.

Одно решение, не относящееся к XSLT - загрузить импортируемую таблицу стилей XSLT в качестве XmlDocument и использовать DOM API, чтобы установить для атрибута href действительно требуемое значение - только затем вызвать преобразование.

...