cocoon-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ans...@tnoo.net (Martin Lüthi)
Subject Re: Aggregation of xml in a directory
Date Tue, 15 Oct 2002 05:49:45 GMT
Hi

Upon recommendation from this list, I initially used XPathDirectoryGenerator,
but it was too slow for online use. Since I know when a file is changed, I
call the following URL which produces one large XML file with the contents of
all files in the directory.

A FileChainingGenerator would probably be a better solution, but here I have a
full Cocoon XML/XSLT solution.  Not very elegant, but at least it works. If
somebody comes up with something better, I'll be happy ;-)

Cheers Martin

----
The sitemap entry:

<!-- Update the (cached) list of all files and write it to the file allfiles.xml -->
<map:match pattern="allfiles-update">
  <map:generate type="directory" src="docs">
     <!-- regexp to exclude all files that have characters after ".xml" -->
     <!-- e.g. auto-save files -->
     <map:parameter name="exclude" value=".*\.xml.+"/>
  </map:generate>
  <map:transform src="stylesheets/lib/aggregate.xsl"/>
  <map:transform type="xinclude"/>
  <map:transform src="stylesheets/lib/sourcewrite.xsl">
     <map:parameter name="sourcefile" value="docs/allfiles.xml"/>
  </map:transform>                                                                 
  <map:transform type="write-source"/>
  <map:serialize type="xml"/>
</map:match>       

----
The stylesheet aggregate.xsl (makes list of XLinks)

<?xml version="1.0" encoding="utf-8"?>

<!-- =======================================================================
     Make include tags for all files given in the input (from DirectoryGenerator)
     ======================================================================= -->

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:dir="http://apache.org/cocoon/directory/2.0" 
  xmlns:xi="http://www.w3.org/2001/XInclude"
  version="1.0">

  <xsl:output method="xml"/>

  <xsl:template match="/">
    <allglaciers>
      <xsl:apply-templates/>
    </allglaciers>
  </xsl:template>

  <xsl:template match="dir:directory">
    <xsl:for-each select="dir:file">
    <xsl:sort select="@name"/>
    <xi:include parse="xml" href="cocoon:/{../@name}/{@name}#xpointer(/*)" />
    </xsl:for-each>
  </xsl:template>

</xsl:stylesheet>

----
The stylesheet sourcewrite.xsl (makes the sourcewriting tags)

<?xml version="1.0" encoding="utf-8"?>

<!-- =======================================================================
     Make source-writing tags
     ======================================================================= -->

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">

  <xsl:param name="sourcefile"/>
  <xsl:output method="xml"/>

  <xsl:template match="/">
    <source:write xmlns:source="http://apache.org/cocoon/source/1.0">
      <source:source><xsl:value-of select="$sourcefile"/></source:source>
     
      <source:fragment>
        <xsl:copy-of select="*"/>
      </source:fragment>
    </source:write>
  </xsl:template>
</xsl:stylesheet>

----



Jeff Turner <jefft@apache.org> writes:

> On Sat, Oct 12, 2002 at 02:08:16PM +0100, Alex McLintock wrote:
> > Hi folks,
> > 
> > I am trying to figure out how to get Cocoon to display all the xml files in 
> > a directory without being explicitly told each of their names in the 
> > sitemap.
> 
> Have a look at the XPathDirectoryGenerator in the scratchpad. With it,
> you can generate a directory listing, with a node extracted from each
> file. Eg, I used it to extract <description> elements from a list of Ant
> scripts:
> 
> http://aft.sourceforge.net/examples/
> 
> The relevant config was:
> 
> <map:sitemap ..
>   <map:components ..
>     <map:generators ..
>       <map:generator  name="xpathdirectory"
>         src="org.apache.cocoon.generation.XPathDirectoryGenerator"/>
> 
>   .....
>   <!-- examples/index.html, listing all scripts -->
>   <map:match pattern="examples/index.xml">
>     <map:generate type="xpathdirectory"
>       src="content/xdocs/examples#/project/description"/>
>     <map:transform
>       src="resources/stylesheets/antdirectory2document.xsl"/>
>     <map:serialize type="xml"/>
>   </map:match>
> 
> 
> --Jeff
> 
> 
> > I guess I need a combination of the Directory Generator and the Aggregation 
> > tools.
> > 
> > I am not too worried about the order of the files otherwise I would have to 
> > use an XML database - which I would like to avoid if possible.
> > 
> > PS I have looked in the Langham/Ziegeler book but can't find anything 
> > useful.
> > 
> > Do I need to write a DirectoryAggregation Generator in Java? perhaps others 
> > would find it useful too.
> > 
> > Alex
> 
> ---------------------------------------------------------------------
> Please check that your question  has not already been answered in the
> FAQ before posting.     <http://xml.apache.org/cocoon/faq/index.html>
> 
> To unsubscribe, e-mail:     <cocoon-users-unsubscribe@xml.apache.org>
> For additional commands, e-mail:   <cocoon-users-help@xml.apache.org>
> 
> 

-- 
Martin Lüthi                 answer@tnoo.net



---------------------------------------------------------------------
Please check that your question  has not already been answered in the
FAQ before posting.     <http://xml.apache.org/cocoon/faq/index.html>

To unsubscribe, e-mail:     <cocoon-users-unsubscribe@xml.apache.org>
For additional commands, e-mail:   <cocoon-users-help@xml.apache.org>


Mime
View raw message