- From: Jostein Austvik Jacobsen <josteinaj@gmail.com>
- Date: Fri, 19 Oct 2012 11:41:39 +0200
- To: Mansour Al Akeel <mansour.alakeel@gmail.com>
- Cc: xproc-dev@w3.org
- Message-ID: <CAOCxfQf+M6JpQF=s-858kTbY9MB45h=TbYAi4wgvcBKUMqV-5A@mail.gmail.com>
I've attached an example that iterates recursively through a directory of
XML files, loads them, applies an XSLT transform, combines them and outputs
in on the primary output port.
Here's an example of how to do recursive directory listing:
http://xproc.org/library/recursive-directory-list.xpl
It will give you something like this:
<c:directory xmlns:c="http://www.w3.org/ns/xproc-step" name="dir"
xml:base="file:/home/jostein/Skrivebord/xproc-subdir-xslt/dir/">
<c:directory name="dir1"
xml:base="file:/home/jostein/Skrivebord/xproc-subdir-xslt/dir/dir1/">
<c:file name="1.xml"/>
<c:file name="2.xml"/>
</c:directory>
<c:directory name="dir2"
xml:base="file:/home/jostein/Skrivebord/xproc-subdir-xslt/dir/dir2/">
<c:file name="3.xml"/>
<c:file name="4.xml"/>
</c:directory>
</c:directory>
If you then run <p:add-xml-base all="true" relative="false"/> on it, you'll
get something that's easier to work with:
<c:directory xmlns:c="http://www.w3.org/ns/xproc-step" name="dir"
xml:base="file:/home/jostein/Skrivebord/xproc-subdir-xslt/dir/">
<c:directory name="dir1"
xml:base="file:/home/jostein/Skrivebord/xproc-subdir-xslt/dir/dir1/">
<c:file name="1.xml"
xml:base="file:/home/jostein/Skrivebord/xproc-subdir-xslt/dir/dir1/"/>
<c:file name="2.xml"
xml:base="file:/home/jostein/Skrivebord/xproc-subdir-xslt/dir/dir1/"/>
</c:directory>
<c:directory name="dir2"
xml:base="file:/home/jostein/Skrivebord/xproc-subdir-xslt/dir/dir2/">
<c:file name="3.xml"
xml:base="file:/home/jostein/Skrivebord/xproc-subdir-xslt/dir/dir2/"/>
<c:file name="4.xml"
xml:base="file:/home/jostein/Skrivebord/xproc-subdir-xslt/dir/dir2/"/>
</c:directory>
</c:directory>
Then simply iterate through all the c:file elements, resolve the @name
against @xml:base to get the full URI to the files, load the files and
apply the XSLT you want:
<p:for-each>
<p:iteration-source select="//c:file"/>
<p:variable name="href" select="p:resolve-uri(/*/@name,/*/@xml:base)"/>
<p:load>
<p:with-option name="href" select="$href"/>
</p:load>
<p:xslt>
<p:input port="parameters">
<p:empty/>
</p:input>
<p:input port="stylesheet">
<p:document href="beverage.xslt"/>
</p:input>
</p:xslt>
</p:for-each>
Hope this helps. :)
Jostein
On Fri, Oct 19, 2012 at 1:40 AM, Mansour Al Akeel <mansour.alakeel@gmail.com
> wrote:
> I am new to Xproc, and by reading about it, I thought it can be help
> me making things cleaner.
> I have many xml files in 3 directories. These files have to pass an
> XSLT transformation. The results is aggregated into one single file
> and a root node is added.
> This is currently done with the help of Java. Then the resulting file
> has to go through multiple XSLTs before getting the final results.
>
> I found this article useful, showing how to use p:directory-list
>
>
> http://www.proxml.be/users/paul/weblog/1722f/Directory_listings_in_XProc.html
>
>
> But then how do I apply a transformation for each file in a loop, and
> send the results to the rest of the style sheets ??
>
> Thank you in advance.
>
>
>
Attachments
- application/zip attachment: xproc-subdir-xslt.zip
Received on Friday, 19 October 2012 09:42:30 UTC