You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.8 KiB
64 lines
2.8 KiB
<?xml version="1.0" encoding="UTF-8"?>
|
|
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|
xmlns:x="http://www.w3.org/1999/xhtml" exclude-result-prefixes="x">
|
|
<xsl:output method="xml" version="1.0" encoding="iso-8859-1" indent="yes"/>
|
|
|
|
<xsl:key name="entry_list" match="x:tr[x:td[2][@align][not(. = 'Number')]]"
|
|
use="preceding-sibling::x:tr[x:td[1][not(@align)][not(. = 'Race Results')]][1]/x:td[1]"/>
|
|
|
|
<xsl:variable name="entries" select="count(//x:tr[x:td[2][@align][not(. = 'Number')]])"/>
|
|
<xsl:variable name="classes" select="count(//x:tr[x:td[1][not(@align)][not(. = 'Race Results')]])"/>
|
|
|
|
<xsl:template match="/">
|
|
<xsl:apply-templates select="//x:table"/>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="x:table">
|
|
<xsl:element name="race">
|
|
<xsl:attribute name="entries"><xsl:value-of select="$entries"/></xsl:attribute>
|
|
<xsl:element name="track"><xsl:value-of select="x:tr[1]/x:th[1]"/></xsl:element>
|
|
<xsl:element name="date"><xsl:value-of select="x:tr[3]/x:th[1]"/></xsl:element>
|
|
<xsl:element name="name"><xsl:value-of select="x:tr[2]/x:th[1]"/></xsl:element>
|
|
<xsl:element name="classes">
|
|
<xsl:attribute name="count"><xsl:value-of select="$classes"/></xsl:attribute>
|
|
<xsl:call-template name="class_handler">
|
|
<xsl:with-param name="class_list" select="x:tr/x:td[1][not(@align)][not(. = 'Race Results')]"/>
|
|
</xsl:call-template>
|
|
</xsl:element>
|
|
</xsl:element>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="class_handler">
|
|
<xsl:param name="class_list"/>
|
|
<xsl:for-each select="$class_list">
|
|
<xsl:element name="class">
|
|
<xsl:attribute name="name"><xsl:value-of select="."/></xsl:attribute>
|
|
<xsl:call-template name="class_entries">
|
|
<xsl:with-param name="entries" select="key('entry_list', . )"/>
|
|
</xsl:call-template>
|
|
</xsl:element>
|
|
</xsl:for-each>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="class_entries">
|
|
<xsl:param name="entries"/>
|
|
<xsl:for-each select="$entries">
|
|
<xsl:sort select="x:td[1]" data-type="number" lang="C"/>
|
|
<xsl:element name="entry">
|
|
<xsl:element name="name"><xsl:value-of select="x:td[5]"/></xsl:element>
|
|
<xsl:element name="from"><xsl:value-of select="x:td[6]"/></xsl:element>
|
|
<xsl:element name="bike">
|
|
<xsl:element name="brand"><xsl:value-of select="x:td[3]"/></xsl:element>
|
|
<xsl:element name="number"><xsl:value-of select="x:td[2]"/></xsl:element>
|
|
</xsl:element>
|
|
<xsl:element name="result">
|
|
<xsl:attribute name="overall"><xsl:value-of select="x:td[1]"/></xsl:attribute>
|
|
<xsl:attribute name="points"><xsl:value-of select="x:td[11]"/></xsl:attribute>
|
|
<xsl:element name="moto1"><xsl:value-of select="x:td[7]"/></xsl:element>
|
|
<xsl:element name="moto2"><xsl:value-of select="x:td[8]"/></xsl:element>
|
|
</xsl:element>
|
|
</xsl:element>
|
|
</xsl:for-each>
|
|
</xsl:template>
|
|
|
|
</xsl:stylesheet>
|