[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: most efficient flat file listing to hierarchical
On 1/11/07, James Fuller <jim.fuller@xxxxxxxxxxxxxx> wrote:
Hello All, ...trickier than it first looks :) This should do the job: <xsl:stylesheet version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="xs"> <xsl:template match="listing"> <dir> <xsl:call-template name="process"> <xsl:with-param name="depth" select="1" as="xs:integer"/> <xsl:with-param name="seq" select="item"/> </xsl:call-template> </dir> </xsl:template> <xsl:template name="process"> <xsl:param name="depth" as="xs:integer"/> <xsl:param name="seq"/> <xsl:for-each-group select="$seq" group-by="tokenize(., '/')[$depth]"> <xsl:variable name="part" select="tokenize(., '/')[$depth]"/> <xsl:choose> <xsl:when test="contains($part, '.')"> <file name="{$part}"/> </xsl:when> <xsl:otherwise> <dir name="{$part}"> <xsl:call-template name="process"> <xsl:with-param name="depth" select="$depth + 1"/> <xsl:with-param name="seq" select="$seq[tokenize(., '/')[$depth] = $part]"/> </xsl:call-template> </dir> </xsl:otherwise> </xsl:choose> </xsl:for-each-group> </xsl:template> </xsl:stylesheet> The output is: <dir> <dir name="cn"> <file name="test.xml"/> </dir> <dir name="en"> <file name="test.html"/> <file name="test1.html"/> <dir name="resource"> <dir name="style"> <file name="test.css"/> </dir> </dir> </dir> <file name="favicon.ico"/> </dir> cheers andrew
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|