Frage

Innerhalb eines XSLT-Dokuments ist es möglich, eine Schleife über eine Reihe von Dateien im aktuellen Verzeichnis?

Ich habe eine Situation, wo ich voll von XML-Dateien ein Verzeichnis haben, die eine Analyse durchgeführt brauchen einen Bericht zu erstellen. Ich habe meine Sheet auf einem einzigen Dokument fein arbeiten, aber ich mag, dass erweitern, ohne auf ein anderes Werkzeug zu gehen, um die XML-Dokumente zu fusionieren.

ich in diese Richtung dachte:

<xsl:for-each select="{IO Selector Here}">
    <xsl:variable select="document(@url)" name="contents" />
    <!--More stuff here-->
</xsl:for-each>
War es hilfreich?

Lösung

In XSLT 2.0 und mit Saxon, können Sie dies mit der collection() Funktion:

<xsl:for-each select="file:///path/to/directory">
  <!-- process the documents -->
</xsl:for-each>

Siehe http: // www .saxonica.com / Dokumentation / sourcedocs / collections.html für weitere Details.

In XSLT 1.0, müssen Sie einen Index erstellen, der die Dokumente aufgeführt, die Sie mit einem separaten Werkzeug bearbeiten möchten. Ihre Umgebung bieten kann ein solches Werkzeug; zum Beispiel hat Cocoon ein Verzeichnis Generator , die einen solchen Index erstellt. Aber ohne zu wissen, was Ihre Umgebung, ist es schwer zu wissen, was zu empfehlen.

Andere Tipps

Wie bereits gesagt, man kann es nicht in einer plattformunabhängigen Art und Weise. In .NET-Welt, können Sie eine benutzerdefinierte XmlResolver so das Dokument ( 'dir: // c: / foo /') erstellen: Verzeichnis in einem beliebigen Format, das Sie wünschen würde die Liste der Dateien in dem '\ foo c' zurückzukehren. Auch die folgenden Links, um weitere Informationen zu benutzerdefinierten XmlResolver sind:

Anpassen der XmlUrlResolver Klasse
Die Macht der XmlResolver

Auch Sie können greifen Skripte verwenden (wie das msxsl: script Element) oder Erweiterungen in Ihrem Stylesheet.

All diese Ansätze werden Ihren XSLT-Code portierbar auf andere Plattformen machen.

Ich glaube nicht, XSL eingerichtet ist, so zu arbeiten: es ist entworfen, von anderen auf ein oder mehrere Dokumente etwas verwendet zu werden, und das würde etwas anderes verantwortlich Dateien für die Suche, auf die die XSLT angewendet werden soll.

Wenn Sie ein Hauptdokument und einen festen Satz von Unterlagen haben, könnten Sie möglicherweise die Verwendung document() Funktion bestimmten Knoten und / oder Werte zurückgeben, aber ich vermute, Ihr Fall ist anders.

Von innen XSLT ich denke, das wird nicht möglich sein.

Sie in allen XML-Dateinamen zu einem passieren kann. als kommagetrennte Liste und Schleife über sie mit Rekursion und substring-before () und substring-after ()

Ich habe ein Kommandozeilen-Tool, das dafür verwendet werden könnte - es verwendet den XSLT-Prozessor Ant (das Java-Build-Tool) zur Eingabe verarbeiten + in Ausgangstransformations eingebaut in. Wäre einfach mit einer Batch-Datei für Schleife zu wickeln.

svn: //donie.homeip.net/public/tools

Wenn Sie mit .Net Sie XsltExtension verwenden können Anrufe von Ihrem XSLT-Dokument zu Methoden in der .net-Klasse zu machen. Das Verfahren könnte dann nodesets wieder zurück zu Ihrem XSLT. So Ihre Methode, um die Datei IO Teil umgehen kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top