XSLT 2.0:Tokenize不适用于句点字符(句号/点)

时间:2014-03-07 13:38:13

标签: xslt tokenize

XSLT的tokenize函数在对句点字符进行标记时无法正常工作。'

-

以下是我对逗号字符进行标记时会发生什么的示例:

XML文件:

<value>a,b,c</value>

XSLT文件:

<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>

输出:

<firsttoken>a</firsttoken>

-

以下是相同的示例,但在句点字符上进行标记:

XML文件:

<value>a.b.c</value>

XSLT文件:

<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>

输出:

<firsttoken/>

-

我无法解释为什么它适用于逗号但不适用于句号。

1 个答案:

答案 0 :(得分:6)

.是XSLT(上下文节点的简写)和正则表达式(任何字母数字字符)中的特殊字符。

如果你想匹配文字“。”你需要在前面用反斜杠来逃避它。

  

我无法解释为什么它适用于逗号但不适用于句号。

标记化确实适用于句点。只是.首先不被解释为句号。

<强>样式表

<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>

<强>输出

<?xml version="1.0" encoding="UTF-8"?><firsttoken>a</firsttoken>