Subject: Re: [xsl] How do you avoid relearning the same coding technique over and over? From: "Dimitre Novatchev dnovatchev@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Thu, 6 Feb 2025 16:11:48 -0000 |
Show example code of an XSLT transformation that uses the EXpath file module to iterate over a set of folders and then for each folder iterate over its files. ChatGPT said: Sure! Below is an example of an XSLT transformation that utilizes the *EXPath File Module* to iterate over a set of folders and then, for each folder, iterate over its files. This assumes that you are using an XSLT 2.0 or 3.0 processor that supports EXPath extensions, such as *Saxon with EXPath extensions*. Example XSLT Code: xml CopyEdit <xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:file="http://expath.org/ns/file" exclude-result-prefixes="file"> <!-- Define the base directory --> <xsl:param name="base-dir" select="'/path/to/base/directory'" as="xs:string"/> <xsl:template match="/"> <folders> <!-- Iterate over the directories inside the base directory --> <xsl:for-each select="file:list($base-dir)"> <xsl:variable name="folder-path" select="file:resolve-path(concat($base-dir, '/', .))"/> <!-- Check if it's a directory --> <xsl:if test="file:is-dir($folder-path)"> <folder name="{.}"> <!-- Iterate over the files in this folder --> <xsl:for-each select="file:list($folder-path)"> <xsl:variable name="file-path" select="file:resolve-path(concat($folder-path, '/', .))"/> <!-- Check if it's a file --> <xsl:if test="file:is-file($file-path)"> <file name="{.}"/> </xsl:if> </xsl:for-each> </folder> </xsl:if> </xsl:for-each> </folders> </xsl:template> </xsl:stylesheet> Explanation: 1. *file:list($base-dir)* b Retrieves the list of items in the base directory. 2. *file:is-dir($folder-path)* b Checks if the current item is a directory. 3. *file:list($folder-path)* b Lists the contents of each directory. 4. *file:is-file($file-path)* b Checks if the current item is a file. 5. The output XML structure includes <folders>, with each <folder> containing its <file> elements. Sample Output: xml CopyEdit <folders> <folder name="Documents"> <file name="report.pdf"/> <file name="notes.txt"/> </folder> <folder name="Images"> <file name="photo.jpg"/> <file name="logo.png"/> </folder></folders> This approach efficiently traverses directories and files using *EXPath File Module* functions. Let me know if you need any modifications! p 4o On Thu, Feb 6, 2025 at 4:19b/AM Roger L Costello costello@xxxxxxxxx < xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > Hi Folks, > > A few days ago, I needed some code to iterate over a set of folders and > then for each folder iterate over its files. > > Over the years I have solved that problem--use the expath file > module--many times. In my most recent need, I spent a few minutes searching > my file system to find an XSLT program that uses the expath module, but I > didn't find anything, so I spent time relearning how to use the expath file > module. What a waste of time. > > In the ideal world, when I develop some code--such as code to iterate over > folders and subfolders--I would pause what I'm doing, create example code > showing how to solve the task, and store that example code in some location > on my file system that I'll remember 6 months, 6 years later. Alas, I'm in > a hurry. I don't do that. > > What's the solution? Discipline? No matter how much I'm in a hurry, stop > and create an example. Is that the solution? > > How do you avoid relearning the same coding technique over and over? > > /Roger > > > -- Cheers, Dimitre Novatchev --------------------------------------- Truly great madness cannot be achieved without significant intelligence. --------------------------------------- To invent, you need a good imagination and a pile of junk ------------------------------------- Never fight an inanimate object ------------------------------------- To avoid situations in which you might make mistakes may be the biggest mistake of all ------------------------------------ Quality means doing it right when no one is looking. ------------------------------------- You've achieved success in your field when you don't know whether what you're doing is work or play ------------------------------------- To achieve the impossible dream, try going to sleep. ------------------------------------- Facts do not cease to exist because they are ignored. ------------------------------------- Typing monkeys will write all Shakespeare's works in 200yrs.Will they write all patents, too? :) ------------------------------------- Sanity is madness put to good use. ------------------------------------- I finally figured out the only reason to be alive is to enjoy it.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] How do you avoid relearni, BR Chrisman brchrism | Thread | Re: [xsl] How do you avoid relearni, Wendell Piez wapiez@ |
Re: [xsl] How do you avoid relearni, BR Chrisman brchrism | Date | Re: [xsl] How do you avoid relearni, Imsieke, Gerrit, le- |
Month |