Is there a function in XSLT that can takes in a directory path and gives back all the files in it??
I have a xml file now reads like this
<filelist> <file>fileA.xml</file> <file>fileB.xml</file> </filelist>
Now, there’s directory called dir, has files fileX.xml, fileY.xml and a bunch of other xml files in it. I want to add these files on to the orginal xml file, so that I can get:
<filelist> <file>fileA.xml</file> <file>fileB.xml</file> <file>fileX.xml</file> <file>fileY.xml</file> .... <!-- other files --> </filelist>
Is there an XSLT way to do this?? something that takes in a dir root, and is able to iterator through all of the files in it?? And then I could just call something like:
<xsl:element name = file > <xsl:copy> <!--whatever file name--> <xsl:copy> </xsl:element>0
[Edit-solution]
all of the answers were very helpful. I ended up finding an external solution (using saxon). I thought it may be helpful for other people to post my solution here, although it is very specific to my own situation.
I use Ant to build a java web app and need to translate some xml files before deployment. Hence, I was using the xslt task to do the job by adding the ‘saxon9.jar’ in the classpath. And in my xsl file, I just did something like this:
<xsl:for-each select='collection('../dir/?select=*.xml')' > <xsl:element name='file'> <xsl:value-of select='tokenize(document-uri(.), '/')[last()]'/> </xsl:element> </xsl:for-each>
XSLT has nothing built-in for this task. XSLT is a transformation language – for dynamic output you generally need a transformation source that contains everything already (just in a different form) – you cannot create XML from nothing.
The three ways you can tackle the problem are:
It boils down to this:
Ergo: Don’t use XSL for this.