Home. 
.

transparent

transparent

transparent

Altova Mailing List Archives


FAQ candidate? parsing line-separated text files (was: Re: Off-topic: DOS script for XML directory listing)

From: Francis Norton <francis@----------->
To:
Date: 3/1/2000 11:12:00 PM
This is a pure DOS / XML / XSLT way of creating an XML file containing
directory listing. It's based on my earlier solution which didn't
tolerate embedded spaces in filenames.

The solution now takes a line-separated text file and processes it into
an XML file. Doing this requires two uses of XML entities, firstly a
system entity to read the text file into the content of an XML element;
and secondly a character entity to access the acii 10 linefeed character
to parse that content. 

For anyone unfamiliar with system entities, run the xmlDir.bat, then see
the difference between looking at xmlDir.xml in a text processor and in
an xml processor like IE5. Ta-da...

I was never very fond of XML entities so this was a useful exercise for
me, I hope it helps others too.

Francis.<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<!-- root function -->
<xsl:template match="/xmlDir">

  <!-- create our root output element -->
  <xmlDir>
  
    <!-- the path is on the first line, filenames on the others -->
    <xsl:call-template name="file">	
      <!-- all the CR-LF pairs have been normalised to ascii 10, as specified in
	    http://www.w3.org/TR/1998/REC-xml-19980210#sec-line-ends
      -->
      <xsl:with-param name="path" select="substring-before(string(), '&#10;')" />  
      <xsl:with-param name="flist" select="substring-after(string(), '&#10;')" />  
    </xsl:call-template> 

  </xmlDir>

</xsl:template>


<!-- process the individual files in the space-separated file list -->
<xsl:template name="file">
  <xsl:param name="path" />
  <xsl:param name="flist" />

  <xsl:if test="$flist != ''">

    <!-- output the path and the first filename as one element -->
    <xmlFile><xsl:value-of 
	            select = "concat($path, '\', substring-before($flist, '&#10;'))" 
              /></xmlFile>

    <!-- now recurse with same path and rest of the filenames -->
    <xsl:call-template name="file">
      <xsl:with-param name="path" select="$path" />
      <xsl:with-param name="flist" select="substring-after($flist, '&#10;')" />
    </xsl:call-template>

  </xsl:if>

</xsl:template>

</xsl:stylesheet>    <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE xmlDir [
<!ENTITY xmlDirList
           SYSTEM "xmlDir.lst">    
  ]>

<xmlDir>&xmlDirList;</xmlDir>Attachment:
xmlDir.bat

Description: application/unknown-content-type-batfile


transparent
Print
Mail
Digg
delicious
Disclaimer
.

These Archives are provided for informational purposes only and have been generated directly from the Altova mailing list archive system and are comprised of the lists set forth on www.altova.com/list/index.html. Therefore, Altova does not warrant or guarantee the accuracy, reliability, completeness, usefulness, non-infringement of intellectual property rights, or quality of any content on the Altova Mailing List Archive(s), regardless of who originates that content. You expressly understand and agree that you bear all risks associated with using or relying on that content. Altova will not be liable or responsible in any way for any content posted including, but not limited to, any errors or omissions in content, or for any losses or damage of any kind incurred as a result of the use of or reliance on any content. This disclaimer and limitation on liability is in addition to the disclaimers and limitations contained in the Website Terms of Use and elsewhere on the site.

.
.

transparent

transparent