XProc-Steps

A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

p:directory-list

<p:declare-step type="p:directory-list">
   <p:output port="result"/>
   <p:option name="path" required="true"/> <!-- anyURI -->
   <p:option name="include-filter"/> <!-- RegularExpression -->
   <p:option name="exclude-filter"/> <!-- RegularExpression -->
</p:declare-step>
 

Durch <p:directory-list> ist es möglich, den Inhalt eines Verzeichnisses innerhalb des Dateisystems auslesen zu lassen. Durch die Option “path“ wird das gewünschte Verzeichnis angegeben. Falls der Prozessor beim Auswerten das Verzeichnis nicht findet, wird ein dynamischer Fehler ausgegeben. Weiterhin ist es möglich, Filterregeln zu definieren. Diese müssen einen regulären Ausdruck gemäß der XPath 2.0-Regeln beinhalten. Durch “include-filter“ ist es möglich festzulegen, was genau ausgegeben werden soll. Analog dazu ist es mit “exclude-filter“ möglich, zu definieren was nicht angezeigt werden soll.

Beispiel

Im folgenden Beispiel soll das aktuelle Verzeichnis (“.“) ausgelesen werden.

<?xml version="1.0" encoding="UTF-8"?>
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" xmlns:c="http://www.w3.org/ns/xproc-step" version="1.0">
   <p:input port="source"> </p:input>
   <p:output port="result"/>
   <p:directory-list path="."/>
</p:declare-step>

Die Ausgabe sieht so aus:

<c:directory name="directory" xml:base="file:../Bachelorarbeit/Quellcodes/directory/">
   <c:file name="directory.xpl"/>
   <c:file name="file.xml"/>
   <c:file name="file2.xml"/>
   <c:file name="file3.txt"/>
   <c:file name="file4.doc"/>
</c:directory>

Angenommen der Benutzer möchte nur Dateien mit der Endung “*.txt“ ausgegeben bekommen, so muss dem Element <p:directory> noch eine Filter-Option als Attribut mitgegeben werden:

<p:directory-list include-filter=".*txt" path="."/>

Folglich würde die Ausgabe folgendermaßen aussehen:

<c:directory name="directory" xml:base="file:../Bachelorarbeit/Quellcodes/directory/">
   <c:file name="file3.txt"/>
</c:directory>

Möchte der Benutzer von der Ausgabe sämtliche Dateien mit der Endung “*.txt“ ausschließen, so muss die Filterregel angepasst werden:

<p:directory-list exclude-filter=".*txt" path="."/>

Das Resultat würde in diesem Fall so aussehen:

<c:directory name="directory" xml:base="file:/Users/tg/Documents/FH%20Worms/6_Semester/Bachelorarbeit/Quellcodes/directory/">
   <c:file name="beispiel_14b_directory.xpl"/>
   <c:file name="file.xml"/>
   <c:file name="file2.xml"/>
   <c:file name="file4.doc"/>
</c:directory>

Werden beide Varianten als Filterregeln verwendet, so wird zuerst die “include-filter“- und danach die “exclude-filter“-Regel durchgeführt.

Tipp der data2type-Redaktion:
Zum Thema XProc bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an: