|
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 |