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:for-each

<p:for-each name? = NCName>
   ((p:iteration-source? &
   (p:output |
    p:log)*),
    subpipeline)
</p:for-each>

Der <p:for-each>-Step stellt eine Schleifenimplementierung unter XProc dar. So werden Dokumente, die diesem Step zugewiesen werden, innerhalb einer Schleife, der Reihe nach, in einer Subpipeline verarbeitet. Der Input muss von einem vorherigen Step als Sequenz bereitgestellt werden (also mehrere Dokumente beinhalten). Alternativ kann auch durch <p:iteration-source> der Inhalt bereitgestellt werden.

<p:iteration-source select? = XPathExpression>
   (p:empty |
   (p:pipe |
    p:document |
    p:inline |
    p:data)+)?
</p:iteration-source>

<p:iteration-source> steht nur in <p:for-each> zur Verfügung. Als Attribut kann ein XPath-Ausdruck übergeben werden, der gewünschte Inhalte aus dem initalen Dokument (vom Input-Port) adressiert. Alternativ können auch Inhalte über <p:document>, <p:inline> und <p:data> geladen bzw. kreiert werden. Die eingelesenen Dokumente werden dann in der Subpipeline sukzessive verarbeitet.

Beispiel

Im folgenden Beispiel wird die Funktionalität des <p:for-each>-Steps demonstriert.

<?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:document href="filmsammlung.xml"/>
   </p:input>
   <p:output port="result" sequence="true"/>
   <p:for-each>
      <p:iteration-source select="//Jahr"/>
      <p:output port="result"/>
      <p:rename match="/Jahr" new-name="Datum"/>
   </p:for-each>
</p:declare-step>

Die zu verarbeitenden Daten werden durch den <p:iteration-source>-Step definiert. Er besagt, dass sämtliche “Jahr“-Elemente des eingelesenen Quelldokuments schleifenweise verarbeitet werden sollen. Diese werden nacheinander in den <p:rename>-Step gesendet. Dieser benennt das Element in “Datum“ um.

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