2012-03-25 21 views
2

Die Elemente <xsl:import> und <xsl:include> scheinen sich ziemlich spezifisch zu verhalten. Was ich bin versucht:Verwendung dynamischer href im XSLT Import/Include?

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

möchte ich verschiedene Themen für meine Anwendung Laden ermöglichen. Ich habe eine Einstellung in meiner App, die den Ordnernamen "momentan aktiver Theme" in einem xml-Knoten speichert. Leider funktioniert der obige Code nicht. Kennt jemand einen Workaround, um das zu erreichen, was ich tun möchte?

bearbeiten: gerade mit einem XSLT-Guru über Twitter bestätigt ... es gibt keine nette Möglichkeit, dies zu tun. Einfachste Lösung in meinem Fall wird wahrscheinlich zu Frontend und Backend Sheets zu trennen und laden sie individuell auf die XSLTProcessor ...

+0

Da dies in XSLT nicht funktionierte, musste ich dies um eine Ebene (in meinem Fall nach PHP) verschieben, wo ich diese aktive Themestring als Parameter an den XSLTProcessor übergeben musste. (genau wie ich es mit dem Basispfad im obigen Code getan habe). – iroybot

Antwort

1

xsl: import assembliert das Stylesheet vor der Ausführung. Das Stylesheet kann sich während der Ausführung nicht selbst ändern, was Sie erreichen möchten.

Wenn Sie drei Varianten eines Stylesheets zur Verwendung in verschiedenen Situationen haben, dargestellt durch drei Module A.xsl, B.xsl und C.xsl, dann versuchen Sie, eines davon in das Modul common.xsl zu importieren das enthält den allgemeinen Code, Sie müssen die Struktur invertieren: jede von A.xsl, B.xsl und C.xsl sollte common.xsl importieren, und Sie sollten A.xsl, B.xsl oder C.xsl auswählen als Principal Stylesheet Modul beim Initiieren der Transformation.

+0

In meinem Fall konnte ich dieses Problem leicht lösen, indem ich Front- und Backend-XSL-Dateien trennte und die gewünschten (Design-) Dateien vor der Ausführung in den XSLTProcessor lud. Es hätte sich einfach richtig angefühlt, zusätzliche xsl-Dateien aus der xsl-Datei der Anwendung zu laden, weil ich alle notwendigen Daten im XML-DOM (view, action, etc.) für die Erklärung habe. – iroybot

+0

Siehe auch: http://StackOverflow.com/a/12321800/59087 –

1

Was ich bin versucht:

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

Dieses isn‘ t erlaubt in jeder Version (1.0, 2.0 oder 3.0) von XSLT.

In XSLT 2.0 (und höher) kann man das Attribut use-when verwenden, aber die Bedingungen, die angegeben werden können, sind sehr begrenzt.

Eine Nicht-XSLT-Lösung ist das Importieren XSLT-Stylesheet als XmlDocument und verwenden Sie die DOM-API zu laden zu setzen href Attribut auf den wirklich wollte Wert - erst dann die Transformation aufrufen.

Verwandte Themen