Mehrere Datei-Eingänge?
Innerhalb eines XSLT-Dokuments, ist es möglich, eine Schleife über eine Menge von Dateien in das aktuelle Verzeichnis?
Habe ich eine situation, wo ich ein Verzeichnis voll von xml-Dateien, müssen Sie einige Analysen durchgeführt, um einen Bericht zu erzeugen. Ich habe mein stylesheet ein einzelnes Dokument in Ordnung, aber ich würde gerne verlängern, die ohne weiteres Werkzeug zum Zusammenführen von xml-Dokumenten.
Ich dachte in dieser Richtung:
<xsl:for-each select="{IO Selector Here}">
<xsl:variable select="document(@url)" name="contents" />
<!--More stuff here-->
</xsl:for-each>
Du musst angemeldet sein, um einen Kommentar abzugeben.
In XSLT 2.0 und Saxon, Sie können dies tun, mit der
collection()
Funktion:Sehen http://www.saxonica.com/documentation/sourcedocs/collections.html für mehr details.
In XSLT 1.0, müssen Sie einen index erstellen, die eine Liste der Dokumente, die Sie Bearbeiten möchten, mit einem separaten tool. Ihre Umgebung bieten können, wie ein Werkzeug; zum Beispiel, Cocoon hat eine Directory Generator, die erstellt einen solchen index. Aber ohne zu wissen, was in Ihrer Umgebung ist, ist es schwer zu wissen, was zu empfehlen.
Als andere sagten, man kann nicht in einem Plattform-unabhängigen Weg. In .NET-Welt, Sie können eine benutzerdefinierte XmlResolver, damit das Dokument('dir://c:/foo/') würde die Liste der Dateien zurück in die 'c:\foo' Verzeichnis in ein beliebiges format Sie wünschen. Finden Sie unter den folgenden links für mehr Informationen über benutzerdefinierte XmlResolver-s:
Anpassen der XmlUrlResolver-Klasse
Die macht der XmlResolver
Außerdem können Sie resort auf die Verwendung von Skripten (wie die msxsl:script element) oder Erweiterungen in Ihr XSLT-stylesheet.
All diese Ansätze machen Ihren XSLT-code unportabel zu anderen Plattformen.
Ich glaube nicht, dass XSL ist so eingerichtet, das es so funktioniert: es ist entworfen, um verwendet werden, indem Sie etwas anderes auf ein oder mehrere Dokumente, und etwas anderes wäre verantwortlich für die Suche nach Dateien, die die XSLT angewandt werden.
Wenn Sie ein Hauptdokument und eine Feste Menge von Dokumenten, die Sie möglicherweise nutzen die
document()
- Funktion, um bestimmte Knoten und/oder Werte, aber ich vermute, Ihr Fall ist anders.Innerhalb von XSLT ich denke, das wird nicht möglich sein.
Könnte passieren in allen XML-Datei-Namen in eine <xsl:param name="files" /> als Komma-separierte Liste und Durchlaufen Sie es mit Rekursion und substring-before() und substring-after().
Ich habe ein Kommandozeilen-tool, das verwendet werden könnte, - es verwendet den XSLT-Prozessor integriert Ant (java-build-tool) zum verarbeiten von Eingaben + Transformation zu output. Wäre einfach zu wickeln mit einer batch-Datei, die for-Schleife.
svn://donie.homeip.net/public/tools
Wenn Sie mit .Net können Sie XsltExtension, um Anrufe von Ihrem XSLT-Dokument zu den Methoden in Ihrem .net-Klasse. Die Methode könnte dann wieder node-Gruppe zurück, um Ihre XSLT. Also deine Methode behandeln konnte, die Datei-E /a-Teil.