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(_dot_)robinson(_at_)stanford(_dot_)edu> 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(_dot_)robinson(_at_)stanford(_dot_)edu
Stanford University HighWire Press
http://highwire.stanford.edu/
+1 650 7237294 (Work) +1 650 7259335 (Fax)
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--