Connecting Tech Pros Worldwide Forums | Help | Site Map

using document() inside a loop to get all files in a directory

dSchwartz
Guest
 
Posts: n/a
#1: Jul 20 '05
What I think I'm looking for is a way (in XSL stylesheet) to get the
contents of a directory. How can this be accomplished?

more detailed:

/root
index.aspx
xsl_style.xsl
/xml
newsletter_001.xml
newsletter_002.xml
newsletter_xxx.xml


now i want to use xsl_style.xsl to pull two attributes from the root
element of each and every file in the xml directory. Something like
this:

for (each file in xml AS xmlFile)
<xsl:value-of select="document(xmlFile)//newsletter[@title]" />
<xsl:value-of select="document(xmlFile)//newsletter[@date]" />


how do i create that loop? I have to do this without a file that
contains a list of the files in the xml directory, so i need to
dynamically get the contents of the xml directory!

Thanks for your time

Chris Barber
Guest
 
Posts: n/a
#2: Jul 20 '05

re: using document() inside a loop to get all files in a directory


Since XSLT relies heavily on optimisation all references to external
documents must be available and valid at XSLT document parse time. So ....
you can't dynamically open a document unless you know the document
filepathnames *beforehand* and either hard code them or pass them as
parameters to the document.

Dynamic folder and file recursion is *not* really suitable for XSLT - use a
script language to achieve that.

Chris.

"dSchwartz" <schwartz@cableone.net> wrote in message
news:4ae1ece2.0403011455.495fe581@posting.google.c om...
What I think I'm looking for is a way (in XSL stylesheet) to get the
contents of a directory. How can this be accomplished?

more detailed:

/root
index.aspx
xsl_style.xsl
/xml
newsletter_001.xml
newsletter_002.xml
newsletter_xxx.xml


now i want to use xsl_style.xsl to pull two attributes from the root
element of each and every file in the xml directory. Something like
this:

for (each file in xml AS xmlFile)
<xsl:value-of select="document(xmlFile)//newsletter[@title]" />
<xsl:value-of select="document(xmlFile)//newsletter[@date]" />


how do i create that loop? I have to do this without a file that
contains a list of the files in the xml directory, so i need to
dynamically get the contents of the xml directory!

Thanks for your time


Dimitre Novatchev [MVP XML]
Guest
 
Posts: n/a
#3: Jul 20 '05

re: using document() inside a loop to get all files in a directory


Pass the full paths to all files as a parameter to your transformation. Then
you can access them with the document() function.


Cheers,

Dimitre Novatchev [XML MVP],
FXSL developer, XML Insider,

http://fxsl.sourceforge.net/ -- the home of FXSL
Resume: http://fxsl.sf.net/DNovatchev/Resume/Res.html


"dSchwartz" <schwartz@cableone.net> wrote in message
news:4ae1ece2.0403011455.495fe581@posting.google.c om...[color=blue]
> What I think I'm looking for is a way (in XSL stylesheet) to get the
> contents of a directory. How can this be accomplished?
>
> more detailed:
>
> /root
> index.aspx
> xsl_style.xsl
> /xml
> newsletter_001.xml
> newsletter_002.xml
> newsletter_xxx.xml
>
>
> now i want to use xsl_style.xsl to pull two attributes from the root
> element of each and every file in the xml directory. Something like
> this:
>
> for (each file in xml AS xmlFile)
> <xsl:value-of select="document(xmlFile)//newsletter[@title]" />
> <xsl:value-of select="document(xmlFile)//newsletter[@date]" />
>
>
> how do i create that loop? I have to do this without a file that
> contains a list of the files in the xml directory, so i need to
> dynamically get the contents of the xml directory!
>
> Thanks for your time[/color]


Hans-Georg Michna
Guest
 
Posts: n/a
#4: Jul 20 '05

re: using document() inside a loop to get all files in a directory


schwartz@cableone.net (dSchwartz) wrote:
[color=blue]
>What I think I'm looking for is a way (in XSL stylesheet) to get the
>contents of a directory. How can this be accomplished?[/color]

You already got good advice, so there's just one additional hint
here.

I have solved a similar problem by creating a batch file or
shell script that parses the folder and creates an XML file
using echo commands.

In your case that XML file can contain the names of the files
and can be queried from your XSL stylesheet using import or the
document function.

Hans-Georg

--
No mail, please.
Chris Barber
Guest
 
Posts: n/a
#5: Jul 20 '05

re: using document() inside a loop to get all files in a directory


One more comment.

document() doesn't handle missing files very well - it raises a parse time
error. First time I got this I admit that I had expected it to just
gracefully gloss over and continue (shows how much I read the docs then).

I'm not saying that this behaviour is wrong but it's a bit annoying at times
and to my mind makes the XSLT a bit fragile where this particular method is
concerned.

Chris.

"dSchwartz" <schwartz@cableone.net> wrote in message
news:4ae1ece2.0403011455.495fe581@posting.google.c om...
What I think I'm looking for is a way (in XSL stylesheet) to get the
contents of a directory. How can this be accomplished?

more detailed:

/root
index.aspx
xsl_style.xsl
/xml
newsletter_001.xml
newsletter_002.xml
newsletter_xxx.xml


now i want to use xsl_style.xsl to pull two attributes from the root
element of each and every file in the xml directory. Something like
this:

for (each file in xml AS xmlFile)
<xsl:value-of select="document(xmlFile)//newsletter[@title]" />
<xsl:value-of select="document(xmlFile)//newsletter[@date]" />


how do i create that loop? I have to do this without a file that
contains a list of the files in the xml directory, so i need to
dynamically get the contents of the xml directory!

Thanks for your time


dSchwartz
Guest
 
Posts: n/a
#6: Jul 20 '05

re: using document() inside a loop to get all files in a directory


Thanks all for your comments. I guess I'll probably think about
storing the xml inside MS SQL server, or even just using SQL Server
instead of xml....


"Chris Barber" <chris@blue-canoe.co.uk.NOSPAM> wrote in message news:<#stOeLEAEHA.1608@TK2MSFTNGP11.phx.gbl>...[color=blue]
> One more comment.
>
> document() doesn't handle missing files very well - it raises a parse time
> error. First time I got this I admit that I had expected it to just
> gracefully gloss over and continue (shows how much I read the docs then).
>
> I'm not saying that this behaviour is wrong but it's a bit annoying at times
> and to my mind makes the XSLT a bit fragile where this particular method is
> concerned.
>
> Chris.
>
> "dSchwartz" <schwartz@cableone.net> wrote in message
> news:4ae1ece2.0403011455.495fe581@posting.google.c om...
> What I think I'm looking for is a way (in XSL stylesheet) to get the
> contents of a directory. How can this be accomplished?
>
> more detailed:
>
> /root
> index.aspx
> xsl_style.xsl
> /xml
> newsletter_001.xml
> newsletter_002.xml
> newsletter_xxx.xml
>
>
> now i want to use xsl_style.xsl to pull two attributes from the root
> element of each and every file in the xml directory. Something like
> this:
>
> for (each file in xml AS xmlFile)
> <xsl:value-of select="document(xmlFile)//newsletter[@title]" />
> <xsl:value-of select="document(xmlFile)//newsletter[@date]" />
>
>
> how do i create that loop? I have to do this without a file that
> contains a list of the files in the xml directory, so i need to
> dynamically get the contents of the xml directory!
>
> Thanks for your time[/color]
Chris Barber
Guest
 
Posts: n/a
#7: Jul 20 '05

re: using document() inside a loop to get all files in a directory


OK, backtracking a bit.

I have a similar situation where I use script to create an XML document that
is the files and folders with filenames and extensions etc. (not that hard).
Once you have that you can do anything you want using XSLT and the
document() function as long as the files don't disappear.

If you keep your recursive script to generate the base XML generalised then
you can use any XSLT you want to give any form of representation of the
files and folders. In my case I am parsing for XML documents since I'm
keeping metadata about DBF files in corresponding XML files (same names) and
then using this as the basis for an ADO upload to a specific system.

Chris.


"dSchwartz" <schwartz@cableone.net> wrote in message
news:4ae1ece2.0403031442.69ee256c@posting.google.c om...
Thanks all for your comments. I guess I'll probably think about
storing the xml inside MS SQL server, or even just using SQL Server
instead of xml....


"Chris Barber" <chris@blue-canoe.co.uk.NOSPAM> wrote in message
news:<#stOeLEAEHA.1608@TK2MSFTNGP11.phx.gbl>...[color=blue]
> One more comment.
>
> document() doesn't handle missing files very well - it raises a parse time
> error. First time I got this I admit that I had expected it to just
> gracefully gloss over and continue (shows how much I read the docs then).
>
> I'm not saying that this behaviour is wrong but it's a bit annoying at[/color]
times[color=blue]
> and to my mind makes the XSLT a bit fragile where this particular method[/color]
is[color=blue]
> concerned.
>
> Chris.
>
> "dSchwartz" <schwartz@cableone.net> wrote in message
> news:4ae1ece2.0403011455.495fe581@posting.google.c om...
> What I think I'm looking for is a way (in XSL stylesheet) to get the
> contents of a directory. How can this be accomplished?
>
> more detailed:
>
> /root
> index.aspx
> xsl_style.xsl
> /xml
> newsletter_001.xml
> newsletter_002.xml
> newsletter_xxx.xml
>
>
> now i want to use xsl_style.xsl to pull two attributes from the root
> element of each and every file in the xml directory. Something like
> this:
>
> for (each file in xml AS xmlFile)
> <xsl:value-of select="document(xmlFile)//newsletter[@title]" />
> <xsl:value-of select="document(xmlFile)//newsletter[@date]" />
>
>
> how do i create that loop? I have to do this without a file that
> contains a list of the files in the xml directory, so i need to
> dynamically get the contents of the xml directory!
>
> Thanks for your time[/color]


Closed Thread