On Sep 25, 2004, at 5:30 PM, Michael Kay wrote:
A minor observation, you could write this much more consisely and
efficiently as
<xsl:variable name="month-part"
select="('January', 'February', 'March', ...)
[xs:int(substring(current(),6,2)]"/>
I've reworked the stylesheets. I now have two modes -- month and day
-- with the former template looking like this:
<xsl:template match="mods:date | mods:dateIssued" mode="month">
<xsl:param name="source"/>
<xsl:param name="prefix"/>
<xsl:param name="suffix"/>
<xsl:variable name="month-part"
select="('January','February','March','April','May','June','July','Augus
t',
'September','October','November','December')[xs:
int(substring(current(),6,2)]"/>
<xsl:variable name="month-part-abbrev"
select="('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug',
'Sept','Oct','Nov','Dec')[xs:int(substring(current(),6,2)]"/>
<xsl:value-of select="$prefix"/>
<xsl:value-of select="$month-part"/>
<xsl:value-of select="$suffix"/>
</xsl:template>
I'm now back to my original problem, which is that I don't know upfront
the form of my dates, so this gives me this error when I have a date
like YYYY:
Cannot convert zero-length string to an integer
So how can I rework this all to properly handle:
<date>2000</date>
<date>2000-11</date>
<date>2000-11-30</date>
<date>Summer</date>
My config file now looks in part like:
<reftype name="article">
<creator>
<names/>
</creator>
<date>
<year>
<prefix> (</prefix>
<suffix>) </suffix>
</year>
</date>
<title>
<suffix>, </suffix>
</title>
<container>
<title font-style="italic">
<suffix>, </suffix>
</title>
<origin/>
<part-details>
<date>
<month/>
<day>
<prefix> </prefix>
</day>
</date>
<volume/>
<issue>
<prefix>(</prefix>
<suffix>)</suffix>
</issue>
<pages/>
</part-details>
</container>
</reftype>
.... and the templates that deal with it:
<xsl:template match="cs:date">
<xsl:param name="source"/>
<xsl:apply-templates>
<xsl:with-param name="source" select="$source"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="cs:year">
<xsl:param name="source"/>
<xsl:param name="prefix"/>
<xsl:param name="suffix"/>
<xsl:apply-templates select="$source/mods:year">
<xsl:with-param name="prefix" select="cs:prefix"/>
<xsl:with-param name="suffix" select="cs:suffix"/>
<xsl:with-param name="source" select="$source"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="cs:month">
<xsl:param name="source"/>
<xsl:param name="prefix"/>
<xsl:param name="suffix"/>
<xsl:apply-templates select="$source/mods:originInfo/mods:dateIssued |
$source/mods:part/mods:date" mode="month">
<xsl:with-param name="prefix" select="cs:prefix"/>
<xsl:with-param name="suffix" select="cs:suffix"/>
<xsl:with-param name="source" select="$source"/>
</xsl:apply-templates>
</xsl:template>
I'm not even sure the separate modes is a good idea, but I see no
alternative.
Bruce