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.
--------------------------------------------------
My XML:
--------------------------------------------------
<?xml version="1.0" ?>
<root>
<grade>
<course>
<class>1</class>
<shift>0</shift>
<teacher>Z</teacher>
</course>
<course>
<class>2</class>
<shift></shift>
<teacher>na</teacher>
</course>
<var>
<pay></pay>
<price>200</price>
</var>
</grade>
<grade>
<course>
<class>1</class>
<shift>1</shift>
<teacher>X</teacher>
</course>
<course>
<class>2</class>
<shift></shift>
<teacher>X</teacher>
</course>
<var>
<pay>All</pay>
<price>170</price>
</var>
</grade>
<grade>
<course>
<class>1</class>
<shift>1</shift>
<teacher>Y</teacher>
</course>
<course>
<class>2</class>
<shift></shift>
<teacher>Y</teacher>
</course>
<var>
<pay>Basic</pay>
<price>150</price>
</var>
</grade>
<grade>
<course>
<class>1</class>
<shift>0</shift>
<teacher>X</teacher>
</course>
<course>
<class>2</class>
<shift></shift>
<teacher>X</teacher>
</course>
<var>
<pay>Credit</pay>
<price>100</price>
</var>
</grade>
<grade>
<course>
<class>1</class>
<shift>1</shift>
<teacher>Z</teacher>
</course>
<course>
<class>2</class>
<shift></shift>
<teacher>Z</teacher>
</course>
<var>
<pay>All</pay>
<price>100</price>
</var>
</grade>
<grade>
<course>
<class>1</class>
<shift>1</shift>
<teacher>X</teacher>
</course>
<course>
<class>2</class>
<shift></shift>
<teacher>na</teacher>
</course>
<var>
<pay>All</pay>
<price>70</price>
</var>
</grade>
</root>
--------------------------------------------------
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>
Thanks in advance.
Gabriel
--~------------------------------------------------------------------
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(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--