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

D

dSchwartz

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
 
C

Chris Barber

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.

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
 
H

Hans-Georg Michna

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?

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
 
C

Chris Barber

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.

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
 
D

dSchwartz

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

Chris Barber

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.


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

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,009
Latest member
GidgetGamb

Latest Threads

Top