Subject: RE: Generate Hierarchical Tree from non-hierarchical XML From: Jeni Tennison <mail@xxxxxxxxxxxxxxxx> Date: Thu, 17 Aug 2000 21:31:20 +0100 |
At 18:42 17/08/00 +0100, Ben Robb wrote: >Try: > ><xsl:template match="employees"> > <table><xsl:apply-templates select="employee[manager = ''] >"/></table> ></xsl:template> > ><xsl:template match="employee"> > <tr><td width="150"></td><td> > <xsl:value-of select="name" /> > <xsl:if test="../employee[manager != current()/id]"> > <table> > <xsl:apply-templates >select="../employee[manager = current()/id] "> > <xsl:sort select="id"/> > </xsl:apply-templates> > </table> > </xsl:if> > </td></tr> ></xsl:template> If you are using an XSLT Processor that supports keys, you could also use keys to quickly access the employees that you're interested in. Define a key that indexes the employees by their manager: <xsl:key name="employees" match="employee" use="manager" /> and you can then use key('employees', $id) to get the employee with the relevant id. Once this key is defined, the above template becomes: <xsl:template match="employee"> <tr><td width="150"></td><td> <xsl:value-of select="name" /> <xsl:if test="key('employees', id)"> <table> <xsl:apply-templates select="key('employees', id)"> <xsl:sort select="id"/> </xsl:apply-templates> </table> </xsl:if> </td></tr> </xsl:template> Using key() is more efficient if you have a large dataset because it stops the XSLT Processor from having to search through all the nodes to find the relevant employees: they're already collected together for easy access. Cheers, Jeni Jeni Tennison http://www.jenitennison.com/ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: Generate Hierarchical Tree from, Ben Robb | Thread | Re: Generate Hierarchical Tree from, Michal_Mart |
RE: Write to XML file using XSL, Chris Bayes | Date | Re: Selecting case insensitively, Jeni Tennison |
Month |