Subject: RE: [xsl] Recursive selection, elegantly From: "Stephen Tredrea" <stephen.tredrea@xxxxxxxxxxxxx> Date: Sun, 6 Jun 2004 10:34:35 +0200 |
Thanks Mukul for your response (and showing me how to use {} - that's new to me). Unfortunately your solution doesn't cater for instances where: a) an item in the menu is not a 'page', or b) only a selection of resources constitute the menu ...which is why I want to build the menu from the menu node. My apologies for providing an insufficient sample, here's alternative xml: <?xml version="1.0" encoding="UTF-8"?> <root> <menu ref="main_menu"> <item resource="/"/> <item resource="/who_we_are"/> <item resource="/contact_us"/> <item resource="/mulberries"/> </menu> <page about="/"> <name>Home</name> </page> <page about="/who_we_are"> <name>About us</name> </page> <page about="/contact_us"> <name>Contact us</name> </page> <page about="/disclaimer"> <name>Disclaimer</name> </page> <category about="/mulberries"> <name>Top fruit</name> </category> </root> Note that in this sample I don't want 'Disclaimer' in the menu. This XSL below works but... I think it's clunky and I don't understand why the simpler version I provided in my prior example doesn't work. <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="/"> <xsl:apply-templates select="//menu[@ref='main_menu'" mode="main_menu" /> </xsl:template> <xsl:template match="menu" mode="main_menu"> <table> <tr> <xsl:apply-templates select="item" /> </tr> </table> </xsl:template> <xsl:template match="item"> <xsl:param name="resource"><xsl:value-of select="@resource" /></xsl:param> <xsl:apply-templates select="/root/*[@about = $resource]" mode="menu_item" /> </xsl:template> <xsl:template match="*" mode="menu_item"> <td> <a href="{@about}"> <xsl:value-of select="name"/> </a> </td> </xsl:template> </xsl:stylesheet> Regard, Stephen -----Original Message----- From: Mukul Gandhi [mailto:mukul_gandhi@xxxxxxxxx] Sent: 06 June 2004 10:02 AM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: Re: [xsl] Recursive selection, elegantly Hi Stephen, Given the XML - <?xml version="1.0" encoding="UTF-8"?> <root> <menu ref="main_menu"> <item resource="/"/> <item resource="/who_we_are"/> <item resource="/contact_us"/> <item resource="/disclaimer"/> </menu> <page about="/"> <name>Home</name> </page> <page about="/who_we_are"> <name>About us</name> </page> <page about="/contact_us"> <name>Contact us</name> </page> <page about="/disclaimer"> <name>Disclaimer</name> </page> </root> The following XSL - <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="/root"> <html> <head> <title/> </head> <body> <table> <tr> <xsl:apply-templates select="page"/> </tr> </table> </body> </html> </xsl:template> <xsl:template match="page"> <td> <a href="{@about}"> <xsl:value-of select="name"/> </a> </td> </xsl:template> </xsl:stylesheet> produces output - <html> <head> <title></title> </head> <body> <table> <tr> <td><a href="/">Home</a></td> <td><a href="/who_we_are">About us</a></td> <td><a href="/contact_us">Contact us</a></td> <td><a href="/disclaimer">Disclaimer</a></td> </tr> </table> </body> </html> Regards, Mukul --- Stephen Tredrea <stephen.tredrea@xxxxxxxxxxxxx> wrote: > Any suggestion on getting this to work? I can do it > in four steps but not in > three as attempted here! > > Thanks, Stephen > > XML (snippet): > > <menu ref="main_menu"> > <item resource="/" /> > <item resource="/who_we_are" /> > <item resource="/contact_us" /> > <item resource="/disclaimer" /> > </menu> > > <page about="/"> > <name>Home</name> > </page> > > <page about="/who_we_are"> > <name>About us</name> > </page> > > ...etc... > > XSL (snippet): > > <xsl:template match="/"> > <xsl:apply-templates > select="//menu[@ref='main_menu'" mode="main_menu" > /> > </xsl:template> > > <xsl:template match="menu" mode="main_menu"> > <table> > <tr> > <xsl:apply-templates select="//*[@about = > item/resource]" > mode="menu_item" /> > </tr> > </table> > </xsl:template> > > <xsl:template match="*" mode="menu_item"> > <td> > <xsl:element name="a"> > <xsl:attribute name="href"><xsl:value-of > select="@about" > /></xsl:attribute> > <xsl:value-of select="name" /> > </xsl:element> > </td> > </xsl:template> > > Required HTML: > > <table> > <tr> > <td><a href="/">Home</a></td> > <td><a href="/who_we_are">About us</a></td> > ...etc... > </tr> > </table> > > > --+------------------------------------------------------------------ > XSL-List info and archive: > http://www.mulberrytech.com/xsl/xsl-list > To unsubscribe, go to: > http://lists.mulberrytech.com/xsl-list/ > or e-mail: > <mailto:xsl-list-unsubscribe@xxxxxxxxxxxxxxxxxxxxxx> > --+-- > __________________________________ Do you Yahoo!? Friends. Fun. Try the all-new Yahoo! Messenger. http://messenger.yahoo.com/ --+------------------------------------------------------------------ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/ or e-mail: <mailto:xsl-list-unsubscribe@xxxxxxxxxxxxxxxxxxxxxx> --+--
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Recursive selection, eleg, Mukul Gandhi | Thread | RE: [xsl] Recursive selection, eleg, Mukul Gandhi |
xsl-list@lists.mulberrytech.com, Chen Yi | Date | how to get the position of first sp, Chen Yi |
Month |