<xsl:when test="substring(forename, string-length(.)) = '.'">
<xsl:value-of select="surname" />, <xsl:value-of select="forename"
/><xsl:text> </xsl:text>
</xsl:when>
should be
<xsl:when test="substring(forename, string-length(forename)) = '.'">
<xsl:value-of select="surname" />, <xsl:value-of select="forename"
/><xsl:text> </xsl:text>
</xsl:when>
On Wed, May 23, 2012 at 12:31 PM, Charles Muller
<cmuller-lst(_at_)jj(_dot_)em-net(_dot_)ne(_dot_)jp> wrote:
I've been keeping my bibliographies in TEI <biblStruct> format for many
years, but I've been using the <author> node with plain text inside like
this:
<author>Bauman, Syd</author>
rather than using the <forename> and <surname> tags.
Recently I began to use the more specific format of
<author><surname>Bauman</surname><forename>Syd</forename></author>
...but have run into an XSLT problem that has me stymied.
As everyone knows, in bibliography output we have to deal with the case
where the forename might end in a period, and where the output adds a period
after the author's name. I.e., we don't want
Muller, Albert C.
to end up as
Muller, Albert C..
To deal with this problem in my old system, I was using this kind of
structure:
<xsl:template match="author">
[...]
<xsl:when test="substring(., string-length(.)) = '.'">
<xsl:apply-templates/>
<xsl:text> </xsl:text>
</xsl:when>
</xsl:choose>
In other words, in the case where the author name ends in a period, only
inserting a space after, without a period.
I'm now trying to create the same kind of function in the case where the
<forename> tag is used, to test whether or not the forename has a period,
and outputting with or without a period accordingly. After spending half a
day on this, the closest I could come up with was the following code, which
does not do the trick. I present it here as a continuation of the above
example:
<xsl:when test="substring(., string-length(.)) = '.'">
<xsl:apply-templates/>
<xsl:text> </xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="child::surname">
<xsl:choose>
{next, in the case of the presence of a period in the forename, we output
without a period}
<xsl:when test="substring(forename, string-length(.)) = '.'">
<xsl:value-of select="surname" />, <xsl:value-of select="forename"
/><xsl:text> </xsl:text>
</xsl:when>
{next, in the other case, where there is no period in the forename, we
output with a period}
<xsl:otherwise>
<xsl:value-of select="surname" />, <xsl:value-of select="forename"
/><xsl:text>. </xsl:text>
</xsl:otherwise>
I believe I must have an XPath error of some sort, but have not been able to
identify it. Any help will be greatly appreciated. In case it is necessary,
I include the full code below.
Regards,
Chuck
----------------------------------------
<xsl:template match="author">
<!-- 2003-08-01
If our author name is the same as the preceding one, output a string of
dashes in its place. NB this presupposes that identical names are indeed
entered identically! It might also be a wise precaution to normalize-space
both the string values we are comparing. Also, the "suppression marker"
perhaps ought to be in a variable rather than hard-coded as here.
-->
<xsl:choose>
<xsl:when test="preceding::biblStruct[1]/*/author = .">
<xsl:text>----. </xsl:text>
</xsl:when>
<xsl:when test="preceding::biblStruct[1]/*/editor = .">
<xsl:text>----. </xsl:text>
</xsl:when>
<xsl:when test="preceding::bibl[1]/author = .">
<xsl:text>----. </xsl:text>
</xsl:when>
<xsl:when test="preceding::bibl[1]/editor = .">
<xsl:text>----. </xsl:text>
</xsl:when>
<xsl:when test="preceding::bibl[1]/*/author = .">
<xsl:text>----. </xsl:text>
</xsl:when>
<xsl:when test="substring(., string-length(.)) = '.'">
<xsl:apply-templates/>
<xsl:text> </xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="child::surname">
<xsl:choose>
<xsl:when test="substring(forename, string-length(.)) = '.'">
<xsl:value-of select="surname" />, <xsl:value-of select="forename"
/><xsl:text> </xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="surname" />, <xsl:value-of select="forename"
/><xsl:text>. </xsl:text>
</xsl:otherwise>
</xsl:choose></xsl:when>
<xsl:otherwise>
<xsl:apply-templates/><xsl:text>. </xsl:text>
</xsl:otherwise></xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
-------------------
A. Charles Muller
University of Tokyo
Graduate School of Humanities and Sociology, Faculty of Letters
Center for Evolving Humanities
7-3-1 Hongō, Bunkyō-ku
Tokyo 113-8654, Japan
Office: 03-5841-3735
Web Site: Resources for East Asian Language and Thought
http://www.acmuller.net
<acmuller[at]jj.em-net.ne.jp>
Mobile Phone: 090-9310-1787
Twitter @acmuller4
--~------------------------------------------------------------------
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>
--~--
--~------------------------------------------------------------------
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>
--~--