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

1voto

MypR Punkte 49

Zurück zu pgfearos Hinweis.

Ein vorgeschlagener Dateimodul-EXPath-Spezifikationsentwurf würde Dateisystemfunktionen wie diese (file:exists() in der Spezifikation) als Standard-XPath-Erweiterungsfunktionen unterstützen. Es gibt noch keine XSLT-Implementierung dafür, aber es lohnt sich, es im Auge zu behalten.

Für diejenigen, die überprüfen müssen, ob eine Datei existiert oder nicht.

file:exists($path as xs:string)

funktioniert jetzt einwandfrei.

1voto

Bharat Darakh Punkte 163

Wenn Sie es immer noch in XSLT machen wollen, hier ist die Lösung, die ich für mich selbst gemacht habe, wie unten erklärt.

Dies funktioniert nicht mit der normalen java.io.File Klasse in XSLT. Deshalb habe ich die java.nio.file.Files Klasse verwendet.

JARS erforderlich - servelt.jar w: ist der Namespace unserer eigenen Java-Klasse, in der die Methode pathFromURI definiert ist.

Code:

public static java.nio.file.Path pathFromURI(java.net.URI uri) throws Exception {
    return java.nio.file.Paths.get(uri);
}

0voto

Stf Punkte 91

Es kann nicht allein mit Standard-XSLT gemacht werden, du musst eine Erweiterungsfunktion oder einen nervigen Workaround verwenden. Es gibt zwei Methoden zur Verwendung von Erweiterungsfunktionen: Verwendung von Standard-Java/.NET für benutzerdefinierte Funktionen (funktioniert mit einigen Versionen von Saxon, AltovaXML und anderen), oder Verwendung prozessorspezifischer Erweiterungsfunktionen, wie saxon:file-last-modified()/saxon:last-modified(). Du findest einige Beispielscode hier, suchen nach intern:file-exists().

Wenn du keine Erweiterungsfunktionen verwenden kannst, kannst du entweder eine externe XML-Datei generieren, die Informationen über dein Dateisystem enthält und sie an dein Stylesheet übergeben, oder du kannst binäre Bilder in SVG einwickeln und dann fn:doc-available() verwenden.

0voto

Paul Sweatte Punkte 23456

Wenn Sie überprüfen müssen, ob eine XML-Datei existiert, verwenden Sie eine externe Entität und ein Inline-Doctype:

 ]>

Fügen Sie dann die Entität zum Stylesheet hinzu:

&bar;

Der Prozessor wird abbrechen, wenn die Datei nicht gefunden wird.

Wenn Sie wissen, dass die Dateien existieren, aber eine von vielen dynamisch laden möchten, verwenden Sie die concat-Funktion und einen choose/when-Block:

Referenzen

0voto

Max Barrass Punkte 2351

Für alle, die eine einfache XSLT-Lösung zum Überprüfen der Existenz einer Datei benötigen, können Sie einfach verwenden

 unparsed-text-available (concat(system-property('user.dir'),'/filename.text'))

oder es in eine Funktion einwickeln

mit diesem unparsed-text-available(concat(system-property('user.dir'),'/filename.text'))=false() bedeutet, dass die Datei nicht vorhanden ist.

Viel Spaß!

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