.
is a special character both in XSLT (shorthand for the context node) and in a regular expression (any alphanumerical character).
If you'd like to match a literal "." you need to escape it with a backslash in front.
I can't work out why it works for commas but not for period.
The tokenization does work for periods. It is just that .
is not interpreted as a period in the first place.
Stylesheet
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="/">
<firsttoken><xsl:value-of select="tokenize(/value,'\.')[1]" /></firsttoken>
</xsl:template>
</xsl:stylesheet>
Output
<?xml version="1.0" encoding="UTF-8"?><firsttoken>a</firsttoken>