Subject: RE: [xsl] sequential numbering in xslt From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Mon, 4 Jan 2010 21:56:19 -0000 |
> Can I not use the complete file path in the colleciton() > function with Saxon? No, the argument has to be a URI, not a file path. Try select="collection('file:///C:/input/?select=*.xml')" Oh, and try reading the documentation: it usually saves time compared with guessing. http://www.saxonica.com/documentation/sourcedocs/collections.html Regards, Michael Kay http://www.saxonica.com/ http://twitter.com/michaelhkay > > > On Mon, Jan 4, 2010 at 11:52 AM, James A. Robinson > <jim.robinson@xxxxxxxxxxxx> wrote: > > > >> another XML format using XSLT. The output XML file has a > schema and > >> has a required 'seq' attribute in the root element that > needs to be > >> incremented for each input XML file. > >> ... > >> for every input file, in the transformation, I want to increment > >> attribute 'seq' in the output file by 1 when I transform the input > >> files using xslt. > >> I have tried <xsl:number> and tried writing a function. But the > >> problem is that since variables in xslt are constants, there is no > >> way to increment a number, store it in a temp variable and > increment > >> it for the next time in xslt 2.0 unlike procedural > languages like C > >> or > >> C++. > >> > >> Is there any other way of achieving this in XSLT 2.0? > > > > Using position() is one option, keeping track of the number of > > documents you are processing yourself, using a recursive > template, is > > another: > > > > <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" > > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > > > > xmlns:xs="http://www.w3.org/2001/XMLSchema" > > > > exclude-result-prefixes="xs"> > > > > <!-- URI approporiate for fn:collection, e.g., in > > saxon: > > > > <collection stable="true"> > > <doc href="file1.xml" /> > > <doc href="file2.xml" /> > > <doc href="file3.xml" /> > > </collection> > > --> > > <xsl:param name="collection-href" required="yes" /> > > > > <!-- Previous sequence number, if we need to start at > > some point other than 1. --> > > <xsl:param name="previous-number" select="0" /> > > > > > > <xsl:template match="/"> > > <xsl:call-template name="example"> > > <xsl:with-param name="documents" > > select="collection($collection-href)" /> > > <xsl:with-param name="previous-number" > select="$previous-number" > > /> > > </xsl:call-template> > > </xsl:template> > > > > <xsl:template name="example"> > > <xsl:param name="documents" /> > > <xsl:param name="previous-number" required="yes" /> > > > > <xsl:if test="$documents[1]"> > > <xsl:variable name="current-number" as="xs:integer" > > select="xs:integer($previous-number+1)" /> > > > > <!-- Here we could use xsl:result-document and > > xsl:apply-templates > > to kick off processing of our input document. --> > > <example seq="{$current-number}" /> > > > > <!-- Now we recursively process the next document in > our list --> > > <xsl:call-template name="example"> > > <xsl:with-param name="documents" > select="remove($documents, 1)" > > /> > > <xsl:with-param name="previous-number" > select="$current-number" > > /> > > </xsl:call-template> > > </xsl:if> > > > > <!-- Here, if not($documents), we could write out our > > last number to some file that we use to track our > > sequence number across time. --> > > </xsl:template> > > > > </xsl:stylesheet> > > > > Running this w/ the example collection document and no override of > > $previous-number would produce > > > > <example seq="1"/> > > <example seq="2"/> > > <example seq="3"/> > > > > whereas setting $previous-number to 3 would produce > > > > <example seq="4"/> > > <example seq="5"/> > > <example seq="6"/> > > > > > > Jim > > > > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > - - - - - > > James A. Robinson jim.robinson@xxxxxxxxxxxx > > Stanford University HighWire Press > http://highwire.stanford.edu/ > > +1 650 7237294 (Work) +1 650 7259335 (Fax)
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] sequential numbering in x, a kusa | Thread | Re: [xsl] sequential numbering in x, a kusa |
Re: [xsl] sequential numbering in x, a kusa | Date | Re: [xsl] Modern web site design wi, David Carlisle |
Month |