Im Grunde möchte ich dies in XSL machen:
Aber anscheinend kann ich kein Variablen ($domain) im include verwenden. Irgendwelche Vorschläge für einen Workaround?
Im Grunde möchte ich dies in XSL machen:
Aber anscheinend kann ich kein Variablen ($domain) im include verwenden. Irgendwelche Vorschläge für einen Workaround?
xsl:import
und xsl:include
werden zur Kompilierzeit aufgelöst und unterstützen keine Laufzeiterweiterung.
Ausnahme, wenn Sie XSLT 2.0 verwenden, können Sie bedingte Einbindung mit use-when
verwenden, wenn Sie einen Ausdruck haben, der in einem statischen Kontext ausgewertet werden kann.
Wie @lavinio erläutert, kann in XSLT 2.0 das use-when
-Attribut verwendet werden, um eine gewisse "Kompilierungszeit"-Einbindung einer XSLT-Anweisung zu ermöglichen. Dies ist jedoch nur auf das Testen von Bedingungen beschränkt, die aus Werten im statischen Kontext und aus diesen dynamischen Kontextwerten abgeleitet werden können: aktuelles Datum und Uhrzeit sowie implizite Zeitzonierung.
Ein weiterer Ansatz besteht darin, das XSLT-Stylesheet (als XML-Dokument) zur Laufzeit zu laden und vor dem Initiieren der Transformation dynamisch den href
-Attribut beliebiger gewünschter und/oder -Anweisungen festzulegen.
Diese Technik wird vom XPath Visualizer verwendet, um das XSLT-Stylesheet dynamisch zu ändern, das dann den vom Benutzer angegebenen XPath-Ausdruck auswertet und das XML-Dokument mit allen ausgewählten und sichtbaren Knoten formatiert - hervorgehoben.
Mit der Ergänzung von statischen Parametern ist es jetzt möglich, bedingt in XSLT 3.0 einzuschließen. Statische Parameter können im use-when
-Attribut des xsl:include
verwendet werden.
Jetzt können wir Parameter mit Standardwerten von false()
deklarieren und dann die benötigten zur Laufzeit überschreiben...
Hier ist ein vollständiges funktionierendes Beispiel getestet mit Saxon-HE v9.7 (auch getestet mit Saxon-PE 9.5).
XML-Eingabe (test.xml)
Haupt-XSLT 3.0 (test_main.xsl)
Mögliche erste eingeschlossene XSLT 3.0 (test_inc1.xsl)
DATEI 1 EINSCHLIEßEN!!!
Zweite mögliche eingeschlossene XSLT 3.0 (test_inc2.xsl)
DATEI 2 EINSCHLIEßEN!!!
Befehlszeile (Setzen von inc2
auf true)
java -cp "saxon9he.jar" net.sf.saxon.Transform -s:"test.xml" -xsl:"test_main.xsl" inc2="true"
Ausgabe
DATEI 2 EINSCHLIEßEN!!!
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
0 Stimmen
Gute Frage, +1. Sehen Sie meine Antwort für eine XSLT 2.0 - nur mögliche (aber begrenzte) Lösung und eine alternative, nicht-XSLT-Lösung.