|
Subject: Re: [xsl] sort a node across a dynamic group of files From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx> Date: Sun, 22 Nov 2009 14:57:41 -0500 |
I searched the archives of this forum (and the internet at large) looking for an answer to this query before posting, but I apologize in advance if I missed something. I found lots of results that seem to work if you have a static (and known) list of files before starting. If you have any suggestions for better search terms, please let me know.
I am using XSLT 1.0.
I have multiple XML files in a directory. The number of files is frequently growing but they are all named ####.xml (example: 0001.xml, 0002.xml, 0003.xml, etc.) It is important to know that there will *never* be any skipped numbers. If 0100.xml exists it is guaranteed that 0001-0099 exist as well.
...
An earlier plan was to try and use the recursive method above. That looked like this:
<!-- Just the relevant entry template --> <xsl:template match="entries">
<!-- Set up our iterators --> <xsl:param name="i" select="document( 'toc.xml' )//entries" />
Thank you for any help you can give on this matter. I appreciate any and all leads. I hope I haven't left any relevant information out.
t:\ftemp>type 0001.xml <doc> <name>x</name> </doc>
t:\ftemp>type 0002.xml <doc> <name>q</name> </doc>
t:\ftemp>type 0003.xml <doc> <name>z</name> </doc>
t:\ftemp>xslt j.xsl j.xsl con last=3 <?xml version="1.0" encoding="utf-8"?> q x z t:\ftemp>type j.xsl <?xml version="1.0" encoding="US-ASCII"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:call-template name="do-all">
<xsl:with-param name="index" select="$last"/>
</xsl:call-template>
</xsl:template><xsl:template name="do-all">
<xsl:param name="index"/>
<xsl:param name="docs" select="/.."/>
<xsl:choose>
<xsl:when test="$index>0">
<xsl:call-template name="do-all">
<xsl:with-param name="index" select="$index - 1"/>
<xsl:with-param name="docs"
select="$docs |
document(concat(format-number($index,'0000'),'.xml'))"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<!--$docs is ready with all documents-->
<!--sort by name-->
<xsl:variable name="names" select="$docs/doc/name"/>
<xsl:for-each select="$names">
<xsl:sort select="."/>
<xsl:text>
</xsl:text>
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
</xsl:template>-- Vote for your XML training: http://www.CraneSoftwrights.com/s/i/ Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/ Training tools: Comprehensive interactive XSLT/XPath 1.0/2.0 video Video lesson: http://www.youtube.com/watch?v=PrNjJCh7Ppg&fmt=18 Video overview: http://www.youtube.com/watch?v=VTiodiij6gE&fmt=18 G. Ken Holman mailto:gkholman@xxxxxxxxxxxxxxxxxxxx Male Cancer Awareness Nov'07 http://www.CraneSoftwrights.com/s/bc Legal business disclaimers: http://www.CraneSoftwrights.com/legal
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] sort a node across a dyna, J. Argyl Plath | Thread | Re: [xsl] sort a node across a dyna, G. Ken Holman |
| Re: [xsl] sort a node across a dyna, J. Argyl Plath | Date | Re: [xsl] sort a node across a dyna, G. Ken Holman |
| Month |