15 Stimmen

Wie überprüfe ich das Vorhandensein einer externen Datei mit XSL?

Ich habe viele Beispiele gefunden, die sich auf Java und C beziehen, aber wie kann ich überprüfen, ob eine externe Datei mit XSL existiert?

Zunächst einmal ist mir klar, dass dies nur ein Ausschnitt ist, aber es gehört zu einem riesigen Stylesheet, also hoffe ich, dass es ausreicht, um mein Problem zu zeigen.

Was ich gerne tun würde, ist eine "if"-Anweisung um die {$SMSname}.jpg Zeile herum zu setzen. Das heißt:

Aufgrund von "Gruppierung", usw. verwende ich XSLT 2.0. Ich hoffe, dass dies etwas ist, das gemacht werden kann. Ich hoffe noch mehr, dass es etwas Einfaches ist.

Wie immer vielen Dank im Voraus für jegliche Hilfe. LO

11voto

Eero Helenius Punkte 2504

Für alle anderen, die möglicherweise auf diese alte Frage stoßen, habe ich durch das Zusammensetzen von Informationen aus verschiedenen Quellen im Internet diese XSLT2-Funktion entwickelt, die eine Java-Erweiterung für die Überprüfung des Dateiexistenz verwendet:

Sie können die Funktion dann folgendermaßen verwenden:

Dies funktioniert zumindest mit Saxon 9.1.0.5J — habe es nicht mit anderen XSLT-Prozessoren getestet.

Hinweis: Wenn die Datei, für deren Existenz Sie überprüfen, eine XML-Datei ist und Sie XSLT2 verwenden, können Sie auch die integrierte doc-available()-Funktion verwenden:

10voto

Dimitre Novatchev Punkte 234995

Nein, dies kann nicht mit XSLT 2.0/XPath 2.0 gemacht werden.

Die XSLT 2.0 Funktion unparsed-text-available() eignet sich nur zum Auffinden von Textdateien und selbst wenn eine Textdatei mit der angegebenen URI existiert, kann diese Funktion false() zurückgeben, da sie auch den Inhalt der Datei lesen und überprüfen muss, dass sie nur erlaubte Zeichen enthält.

Aus der Spezifikation:

"Die unparsed-text-available Funktion bestimmt, ob ein Aufruf der unparsed-text Funktion mit identischen Argumenten einen String zurückgeben würde.

Wenn das erste Argument eine leere Sequenz ist, gibt die Funktion false zurück. Wenn das zweite Argument eine leere Sequenz ist, verhält sich die Funktion so, als ob das zweite Argument ausgelassen wurde.

In anderen Fällen gibt die Funktion true zurück, wenn ein Aufruf von unparsed-text mit denselben Argumenten erfolgreich wäre, und false, wenn ein Aufruf von unparsed-text mit denselben Argumenten mit einem nicht wiederherstellbaren dynamischen Fehler fehlschlagen würde.

Hinweis:

Dies erfordert, dass die unparsed-text-available Funktion tatsächlich versuchen sollte, die Ressource zu lesen, die durch die URI identifiziert wird, und überprüfen, dass sie korrekt codiert ist und keine Zeichen enthält, die in XML ungültig sind."

Ende des Zitats.

3voto

elysch Punkte 1726

Wenn jemand anderes es benötigt und fop verwendet, würde ich gerne diese Antwort teilen, da sie für mich wie ein Zauber funktioniert hat.

Ich habe eine Lösung gefunden:

und es funktioniert unabhängig von XSLT 1.0 oder 2.0

2voto

mdma Punkte 55529

EDIT: Verwenden Sie die unparsed-text-available Funktion. Es ist Teil von xslt 2.0, aber nicht XQuery oder standalone XPath.

Ich habe meine vorherige Antwort hier gelassen, damit Sie dem Weg der Unsicherheit folgen können...

Ich glaube nicht, dass es eine Möglichkeit gibt, dies in XSLT mit den Standardfunktionen zu tun. Sie können es mit Erweiterungsfunktionen tun, wie hier für Java beschrieben.

Es gibt die unparsed-text-available Funktion, aber ich bin mir nicht sicher, ob dies eine Standardfunktion ist. Ein Beispiel für die Verwendung finden Sie auf Zvon. Die unparsed-text-available Funktion wird hier als Teil von xslt 2.0 erwähnt und wird in Saxon unterstützt.

2voto

pgfearo Punkte 1965

Ein vorgeschlagenes EXPath-Spezifikation des Dateimoduls würde Dateisystemfunktionen wie diese (file:exists() in der Spezifikation) als standardisierte XPath-Erweiterungsfunktionen unterstützen. Es gibt noch keine XSLT-Implementierung dafür, es lohnt sich jedoch, dies zu beobachten.

CodeJaeger.com

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.

Powered by:

X