Эта таблица стилей:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="name">
<xsl:variable name="vFollowing"
select="count(following-sibling::name)"/>
<xsl:value-of
select="concat(.,substring(', ',1 div ($vFollowing > 1)),
substring(' and ',1 div ($vFollowing = 1)),
substring('.',1 div ($vFollowing = 0)))"/>
</xsl:template>
</xsl:stylesheet>
Вывод:
Lorem Ipsum, Lorem Ipsum, Lorem Ipsum and Lorem Ipsum.
РЕДАКТИРОВАТЬ : Также с fn:position()
и fn:last()
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="name">
<xsl:value-of
select="concat(.,substring(', ',1 div (last()-1 > position())),
substring(' and ',1 div (last()-1 = position())),
substring('.',1 div (last()=position())))"/>
</xsl:template>
</xsl:stylesheet>
РЕДАКТИРОВАТЬ 2 : решение для сопоставления с образцом.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="name">
<xsl:value-of select="concat(.,', ')"/>
</xsl:template>
<xsl:template match="name[last()-1 = position()]">
<xsl:value-of select="concat(.,' and ')"/>
</xsl:template>
<xsl:template match="name[last()]">
<xsl:value-of select="concat(.,'.')"/>
</xsl:template>
</xsl:stylesheet>