[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Unexpected result from <a href="...">...</a> in so
At 2008-08-19 15:05 -0600, Quinn Taylor wrote: Allow me to clarify... Thanks for doing so. What result to you expect for your test string "/path/to/resource"? Got it. If you run my code with the commented code un-commented, you can actually see that $parentPath has the value I want, it just isn't printing out what I need. But I couldn't understand the output that it gives: <a href="../../../">[root]</a> / path<../../path> / to<../to> / resource ... which is certainly different than your clarification, so I appreciate you took the time to clarify. I also got lost in your code with the definition of the variable "recursiveResult" and pulling it apart again ... I couldn't see why the variable would be necessary and not just generate each step as required. Below is what I think is a complete result, without the need for such a variable. I've tried to document it to explain the approach. I hope this helps. . . . . . . . . . . . Ken
<xsl:template match="*"> <xsl:call-template name="printRecursivePath"> <xsl:with-param name="text">/path/to/resource</xsl:with-param> </xsl:call-template> <xsl:call-template name="printRecursivePath"> <xsl:with-param name="text">/to/resource</xsl:with-param> </xsl:call-template> <xsl:call-template name="printRecursivePath"> <xsl:with-param name="text">/resource</xsl:with-param> </xsl:call-template> </xsl:template> <!-- Split path components at '/', add parent directory links --> <xsl:template name="printRecursivePath"> <!--$path rebuilds the input $text one step at a time--> <xsl:param name="path" select="''"/> <!--$parent builds "../" for each parent in the $text--> <xsl:param name="parent" select="'../'"/> <!--this starts as original and pares down each step--> <xsl:param name="text"/> <!--this is the next branch of the text--> <xsl:variable name="head" select="substring-before($text,'/')"/> <!--this is what is left after the next branch of the text--> <xsl:variable name="tail" select="substring-after($text,'/')"/> <xsl:choose> <xsl:when test="not(contains($tail,'/'))"> <!--at the last portion of the text, put out link--> <a href="{$parent}"> <xsl:choose> <xsl:when test="$parent='../' and $head"> <!--must be at penultimate step--> <xsl:value-of select="$head"/> </xsl:when> <xsl:when test="not(substring-before($path,'/'))"> <!--must be at the very start--> <xsl:text>[root]</xsl:text> </xsl:when> <xsl:otherwise> <!--otherwise must be in the middle--> <xsl:value-of select="substring-before($path,'/')"/> </xsl:otherwise> </xsl:choose> </a> <!--with link done, redo logic ignoring first step in path--> <xsl:text> / </xsl:text> <xsl:choose> <xsl:when test="$path"> <!--next step still has path components, so repeat all this logic as if the first step isn't there--> <xsl:call-template name="printRecursivePath"> <xsl:with-param name="text" select="concat(substring-after($path,'/'),$head,'/',$tail)"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <!--the last step does not have path components--> <b> <xsl:value-of select="$tail"/> </b> <!--some white space to separate results--> <xsl:text> </xsl:text> </xsl:otherwise> </xsl:choose> </xsl:when> <xsl:otherwise> <!--still building the parent string for the current $text--> <xsl:call-template name="printRecursivePath"> <xsl:with-param name="parent" select="concat($parent,'../')"/> <xsl:with-param name="path" select="concat($path,$head,'/')"/> <xsl:with-param name="text" select="$tail"/> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet> t:\ftemp>call xslt quinn.xsl quinn.xsl quinn.html t:\ftemp>type quinn.html <a href="../../../">[root]</a> / <a href="../../">path</a> / <a href="../">to</a> / <b>resource</b> <a href="../../">[root]</a> / <a href="../">to</a> / <b>resource</b> <a href="../">[root]</a> / <b>resource</b> t:\ftemp>rem Done! -- Upcoming XSLT/XSL-FO hands-on courses: Wellington, NZ 2009-01 Training tools: Comprehensive interactive XSLT/XPath 1.0/2.0 video G. Ken Holman mailto:gkholman@xxxxxxxxxxxxxxxxxxxx Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/ Male Cancer Awareness Nov'07 http://www.CraneSoftwrights.com/s/bc Legal business disclaimers: http://www.CraneSoftwrights.com/legal
|
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
|