[XSLT] Mit XSLT durch verschiedene Verzeichnisse laufen und XML-Dateien öffnen
-
Hallo,
ich möchte mit XSLT durch eine Verzeichnisstruktur (s. Beispiel) laufen und in jedem Verzeichnis eine Datei mit gleichem Namen öffnen. Aus der Datei.xml soll immer der Gleiche Wert ausgelesen werden und in eine main.txt zeilenweise mit dem passendem Verzeichnisnamen (in dem Fall 0-n) geschrieben werden.
Mit der Verwendung von Xalan etc. bin ich firm, bei der XSLT-Umsetzung jedoch komme ich nicht weiter.
Verzeichnisse sehen so aus:
../0/datei.xml ../1/datei.xml ../2/datei.xml usw.
main.txt
VERZEICHNIS WERT 0 2.332 1 234.023 2 99.12222234 usw.
Ich dachte, ich könnte mit einer Variablen durch alle Verzeichnisse laufen, ähnlich einer for-Schleife in C++.
Hier mal der Pseudo-Code:
Variable n auf 0 setzen Solange Verzeichnis namens n vorhanden ist datei vorhanden? datei als stream in variable pathNumber speichern pathNumber verwenden.. variable n inkrementieren Loop
Bisher siehts so aus. Ich weiß, das es so nich laufen kann, jedoch komme ich nichtmal annähernd an eine Lösung heran..
<xsl:for-each select="document('$nr/datei.xml')"> <xsl:if test="element-available(document('$nr/datei.xml'))"> <xsl:variable name="pathNumber" select="document('$nr/datei.xml')" /> </xsl:if> </xsl:for-each>
Bin um jede Hilfe dankbar,
Schönen Gruß!
-
Ich kenne keine Möglichkeit das in XSLT zu lösen. Du hast weder Zugriff auf das Dateisystem im Sinne von Auflisten von Verzeichnisinhalten noch hast du die Möglichkeit einmal initialisierte Variabeln mit einem neuen Wert zu überschreiben. Das heißt du kannst keinen Zähler direkt in XSLT bauen. Man könnte ihn extern programmieren und in XSLT einbauen, dazu müsstest du aber noch mal Google bemühen. Sowas hab ich noch nie gemacht. Auf alle Fälle wird einem an jeder Ecke davon abgeraten
Ich denke die einfachste Lösung wird sein, wenn du eine XML-Struktur a la <dir>0</dir><dir>1</dir> erzeugst und da dann mit xsl:for-each drüberläufst. Sieht furchtbar häßlich aus, dürfte aber wohl noch die einfachste Möglichkeit sein. Dieses XML musst du natürlich außerhalb des XSLTs erzeugen z.B. mit Perl.
Alternativ bliebe, wie gesagt, die Möglichkeit einen Zähler selbst zu programmieren. Das führt aber u.U. zu Seiteneffekten usw ich verweise einfach auf Google
-
Oha, jetzt wird mir einiges klar.. Gut, vielen Dank für den Hinweis. Ich werde es jetzt, wie Du es auch vorgeschlagen hast, mit externer Gewalt lösen, sprich C++.
Schönen Gruß