This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Flat puzzle. (Re: <xsl:stylesheet xmlns...)



GREAT.

This is what I was suspecting. This also 
means that the "key() vs pipe" thread 
remains open and I'l write more after 
I'l understand what really happens ;-)

Steve - thank you very-very much. I now need to 
struggle with your code trying if  there is any 
other way to do the same with no key(), like  
I did with Sebastian's usecase - but test6.xsl 
was easier. In fact  the 'Flat puzzle' was 
artificially constructed  'suicide'.  ;-)

Rgds.Paul.

----- Original Message ----- 
From: Steve Muench <smuench@us.oracle.com>
To: <xsl-list@mulberrytech.com>
Sent: Monday, August 07, 2000 12:23 AM
Subject: Re: Flat puzzle. (Re: <xsl:stylesheet xmlns...)


> Paul,
> 
> | This is very  good. I wish you already got something  like 
> | 'Flat puzzle' described below.
> 
> 
> Not 100% sure what you want, but this stylesheet illustrates
> a way to get the basic result you're looking for. Given
> an input document like:
> 
> <LIST>
>   <A>content</A>
>   <B dep="A">content</B>
>   <C dep="B">content</C>
>   <D/>
>   <E dep="nowhere"/>
>   <X>content</X>
>   <Y dep="X">content</Y>
>   <Z dep="Y">content</Z>
>   <Q dep="C">content</Q>
> </LIST>
> 
> It produces:
> 
> <html>
>    <body>
>       <h2>A B C Q</h2>
>       <ol>
>          <li>A</li>
>          <li>B</li>
>          <li>C</li>
>          <li>Q</li>
>       </ol>
>       <!--
>        | wasn't sure if you wanted
>        | something with no deps to show
>        | as the only thing under it's heading
>        | or to not have anything show...
>        +>
>       <h2>D</h2>
>       <ol>
>          <li>D</li>
>       </ol>
>       <h2>X Y Z</h2>
>       <ol>
>          <li>X</li>
>          <li>Y</li>
>          <li>Z</li>
>       </ol>
>    </body>
> </html>
> 
> Here's the stylesheet. With some minor tweaking it
> should be able to be coaxed into what you're looking
> for. At the moment it's not picking up the <E/> element
> but this could be done, too, with a little more work.
> Just wanted to show the basic idea. I initially 
> developed it with the OracleXSL engine, but then 
> later changed the 'ora' prefix to map to the Saxon
> namespace and tested it with Saxon, too.
> 
> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>                 xmlns:ora="http://icl.com/saxon"
>                 exclude-result-prefixes="ora">
>   <xsl:output method="html"/>
>   <!-- Index <LIST> children by their dep attribute for fast lookups -->
>   <xsl:key name="dep" match="LIST/*" use="@dep"/>
>   <xsl:template match="LIST">
>     <html>
>       <body>
>         <!-- For each LIST child element with no dep attribute -->
>         <xsl:for-each select="*[not(@dep)]">
>           <!-- Collect dependency chain for current element into a variable -->
>           <xsl:variable name="deps">
>             <xsl:call-template name="selfdeps">
>               <xsl:with-param name="n" select="."/>
>             </xsl:call-template>
>           </xsl:variable>
>           <!-- Convert result tree fragment into nodeset for processing -->
>           <xsl:variable name="deps-set" select="ora:node-set($deps)"/>
>           <!-- Create space-separated title for the header -->
>           <xsl:variable name="title">
>             <xsl:for-each select="$deps-set/*">
>               <xsl:value-of select="name(.)"/>
>               <xsl:if test="position()!=last()">
>                 <xsl:text> </xsl:text>
>               </xsl:if>
>             </xsl:for-each>
>           </xsl:variable>
>           <!-- Print the header -->
>           <h2><xsl:value-of select="$title"/></h2>
>           <!-- Print the list of dependencies including initial element -->
>           <ol>
>           <xsl:for-each select="$deps-set/*">
>             <li><xsl:value-of select="name(.)"/></li>
>           </xsl:for-each>
>           </ol>
>         </xsl:for-each>
>       </body>
>     </html>
>   </xsl:template>
>   <xsl:template name="selfdeps">
>     <xsl:param name="n"/>
>     <!-- Copy the current element into the result tree fragment -->
>     <xsl:copy-of select="$n"/>
>     <!-- If there are some dependencies, recurse to copy them -->
>     <xsl:if test="count(key('dep',name($n)))>0">
>       <xsl:call-template name="selfdeps">
>         <xsl:with-param name="n" select="key('dep',name($n))[1]"/>
>       </xsl:call-template>
>     </xsl:if>
>   </xsl:template>
> </xsl:stylesheet>
> ______________________________________________________________
> Steve Muench, Lead XML Evangelist & Consulting Product Manager
> BC4J & XSQL Servlet Development Teams, Oracle Rep to XSL WG
> Author "Building Oracle XML Applications", O'Reilly
> http://www.oreilly.com/catalog/orxmlapp/
> 
> 
> 
> 
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]