|
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 |