[xsl] How to use following-sibling & starts-with function in xsl

Subject: [xsl] How to use following-sibling & starts-with function in xsl
From: Selva Ganesh <selvaganesh1985@xxxxxxxxx>
Date: Sun, 10 May 2009 07:52:14 +0530
Hi All,

I heartly appreciate.

I have 3 question:
1.	following-sibling function not working in the si  docid attribute
2.	starts-with function not working in laid element
3.	choose method want correct (I need single dates element) in my xsl
repeated the <dates>


This is my XSL:

<xsl:template match="div[@class='DocContainer']">
<xsl:element name="si">
<xsl:attribute name="docid"><xsl:value-of
select="following-sibling::div[@class ='LegPrelims']/h1[@class =
'LegNo'][1]" /></xsl:attribute>
<xsl:attribute name="type"><xsl:text>reg</xsl:text></xsl:attribute>
<xsl:apply-templates></xsl:apply-templates></xsl:element></xsl:template>
<xsl:template match="title"/>
<xsl:template match="style"/>
<xsl:template match="div[@class[.='LegPrelims']]">
<si-begin>
<xsl:apply-templates></xsl:apply-templates>
</si-begin>
</xsl:template>
<xsl:template match="h1">
<xsl:element name="si-nos" >
<xsl:element name="si-year" ><xsl:value-of select="substring-before(.,
' ')"/></xsl:element>
<si-no><xsl:value-of select="substring-after(., '.
')"/></si-no></xsl:element>
</xsl:template>
<xsl:template match="div[@class[.='LegDate']]">
<dates>
<xsl:choose>
<xsl:when test="p='Made'">
<xsl:element name="made"><xsl:attribute name="date">
<xsl:value-of select="p[@class[.='LegDateDate']]"/></xsl:attribute>
<xsl:value-of select="p[@class[.='LegDateText']]"/></xsl:element></xsl:when>
<!--<xsl:when test="(starts-with(p, 'Laid'))">-->
<xsl:when test="p='Laid before Parliament'">
<xsl:element name="laid"><xsl:attribute name="date">
<xsl:value-of select="p[@class[.='LegDateDate']]"/></xsl:attribute>
<xsl:value-of select="p[@class[.='LegDateText']]"/></xsl:element></xsl:when>
<xsl:otherwise>
<xsl:element name="in-force"><xsl:element
name="in-force-text"><xsl:attribute name="date">
<xsl:value-of select="p[@class ='LegDateDate']"/></xsl:attribute>
<xsl:value-of
select="p[@class[.='LegDateText']]"/></xsl:element></xsl:element>
</xsl:otherwise>
</xsl:choose>
</dates>
</xsl:template>

This my input:

<div id="ContentMain"><div class="DocContainer"><div class="LegPrelims">
<h1 class="LegNo">2009 No. 1023</h1>
<p class="LegSubject">Excise</p>
<h1 class="LegTitle">The Excise </h1>
<div class="LegDate">
<p class="LegDateText">Made</p><p class="LegDateDate">22nd April 2009</p>
</div>
<div class="LegDate">
<p class="LegDateText">Laid before Parliament</p><p
class="LegDateDate">22nd April 2009</p>
</div>
<div class="LegDate">
<p class="LegDateText">Coming into force</p><p class="LegDateDate">1st
June 2009</p>
</div>

</div>
</div>
</div>


This is expected output

<si docid="s2009no815" type="reg">
<si-begin>
<si-nos>
<si-year>2009</si-year>
<si-no>815</si-no>
</si-nos>
<subject>
<subject-text>EXCISE</subject-text>
</subject>
<ti al="c">The Excise</ti>
<dates>
<made date="20090422">Made</made>
<laid date="20090422">Laid before Parliament</laid>
<in-force date="20090601"><in-force-text>Coming into force</in-force-text>
</in-force>
</dates>

</si-begin>
</si>

Thanks,
Selva

Current Thread