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

Discussion in 'XML' started by dSchwartz, Mar 1, 2004.

  1. dSchwartz

    dSchwartz Guest

    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, Mar 1, 2004
    #1
    1. Advertising

  2. dSchwartz

    Chris Barber Guest

    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" <> wrote in message
    news:...
    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, Mar 2, 2004
    #2
    1. Advertising

  3. 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" <> wrote in message
    news:...
    > 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], Mar 2, 2004
    #3
  4. (dSchwartz) wrote:

    >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

    --
    No mail, please.
    Hans-Georg Michna, Mar 2, 2004
    #4
  5. dSchwartz

    Chris Barber Guest

    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" <> wrote in message
    news:...
    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, Mar 2, 2004
    #5
  6. dSchwartz

    dSchwartz Guest

    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" <> wrote in message news:<#>...
    > 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" <> wrote in message
    > news:...
    > 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, Mar 3, 2004
    #6
  7. dSchwartz

    Chris Barber Guest

    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" <> wrote in message
    news:...
    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" <> wrote in message
    news:<#>...
    > 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" <> wrote in message
    > news:...
    > 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, Mar 3, 2004
    #7
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. mrmagoo
    Replies:
    6
    Views:
    9,309
    Revathishre
    May 6, 2011
  2. Ajay Garg
    Replies:
    5
    Views:
    206
  3. Jim Ley
    Replies:
    3
    Views:
    205
  4. SMH
    Replies:
    2
    Views:
    254
  5. Isaac Won
    Replies:
    9
    Views:
    372
    Ulrich Eckhardt
    Mar 4, 2013
Loading...

Share This Page