Subject: Re: [xsl] Key problem. Ordering XML with conditions than generate new associations. From: Geert Josten <Geert.Josten@xxxxxxxxxxx> Date: Wed, 28 Sep 2005 22:41:47 +0200 |
About: "RE: [xsl] Another <xsl:key> problem "
My intentions are educational. :-) I'm a beginner.
Now my problem is to order nodes in groups based on certain characteristics of their children. (Using DIV tags.) And perhaps seeing to other way I can find my own solution.
Really I do not have opinion. I used your template and did not obtain results, because of it I sent the xml again.
Your recursion solution is elegant, but I can't understand the siblings use.
May be you can help me...
____________________________________________________________ My own problem is:
This is language's teacher board offer example. I need sort teacher's offers
by price. And sort teachers from cheapest to most expensive.
With this rule: "If the course can pay with credit card or is not informed,
it's a promotion."
The promotions are a new group. And carry out the teacher's rules.
Other additional complication: courses have two or more teachers. And the sorted group uses the first teacher's name.
<!-- promotions --> <xsl:apply-templates select="//grade[(var/pay = 'Credit') or (var/pay = '')]" /> <!-- others --> <xsl:apply-templates select="//grade[(var/pay != 'Credit') and (var/pay != '')]"> <xsl:sort select="var/price" data-type="number" /> </xsl:apply-templates>
<xsl:key name="courses-by-teacher" match="course" use="teacher" /> <xsl:key name="teachers" match="teacher" use="." />
<xsl:for-each select="//teacher"> <!-- alphabetize them --> <xsl:sort />
<!-- teacher occur multiple times, take first occurrence --> <xsl:if test="generate-id(.) = generate-id(key('teachers', .)[1])"> <group> <xsl:copy-of select="." /> <xsl:copy-of select="key('courses-by-teacher', .)" /> </group> </xsl:if> </xsl:for-each>
--------------------------------------------------
My XSL is:
--------------------------------------------------
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="order1" match="grade" use="((substring(var/pay,1,1))='') or ((substring(var/pay,1,1))='C')" /> <xsl:key name="order2" match="grade" use="concat(((substring(var/pay,1,1))='') or ((substring(var/pay,1,1))='C'),course[1]/teacher)" />
<xsl:template match='root'> <table>
<!--Expecial logic for C pay nodes.-->
<xsl:for-each select="grade[count(. | key('order1', 'true')[1]) = 1]"> <xsl:if test="generate-id()=generate-id(key('order1', 'true'))">
<tr><td><div><xsl:attribute name="id">credit_offer</xsl:attribute><table> <tr><td>Credit Offer</td></tr> <xsl:for-each select="key('order1', 'true')"> <xsl:sort select="var/price" order="ascending" data-type="number"/> <xsl:call-template name="course"/> </xsl:for-each> </table></div></td></tr> </xsl:if> </xsl:for-each> <!--Logic to group nodes with standar pays-->
<xsl:for-each select="grade[count(. | key('order2', concat('false',course[1]/teacher))[1]) = 1]"> <xsl:if test="generate-id()=generate-id(key('order2', concat('false',course[1]/teacher)))">
<tr><td><div><xsl:attribute name="id"><xsl:value-of select="course[1]/teacher"/></xsl:attribute><table> <tr><td>Teacher's Leader: <xsl:value-of select="course[1]/teacher"/></td></tr> <xsl:for-each select="key('order2', concat('false',course[1]/teacher))">
<xsl:sort select="var/price" order="ascending" data-type="number"/>
<xsl:call-template name="course"/>
</xsl:for-each>
</table></div></td></tr>
</xsl:if>
</xsl:for-each>
</table>
</xsl:template>
<!--The rest.-->
<xsl:template name="course"> <tr>
<td><xsl:value-of select="position()"/>.</td>
<td>Price: <xsl:value-of select="var/price"/>.</td>
<td><xsl:apply-templates select='course'/></td>
</tr>
</xsl:template>
<xsl:template match="course">
<br/>teacher: <xsl:value-of select="teacher"/>  
class: <xsl:value-of select="class"/>  
shift: <xsl:value-of select="shift"/>  
Pay: <xsl:value-of select="../var/pay"/>
</xsl:template>
</xsl:stylesheet>
HTH, Geert
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Key problem. Ordering XML wit, Gabriel Osorio | Thread | Re: [xsl] Key problem. Ordering XML, Ragulf Pickaxe |
Re: [xsl] What data needs to be enc, Geert Josten | Date | Re: [xsl] What data needs to be enc, David Carlisle |
Month |