这是XSL中的一段代码,它将文本标记为由interpunction和类似字符分隔的片段。我想问一下是否有可能以某种方式捕获文本被标记化的字符串,例如逗号或点等。
<xsl:stylesheet version="2.0" exclude-result-prefixes="xs xdt err fn" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:err="http://www.w3.org/2005/xqt-errors" xmlns:xdt="http://www.w3.org/2005/xpath-datatypes">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="GENERUJ">
<TEXT>
<xsl:variable name="text">
<xsl:value-of select="normalize-space(unparsed-text(@filename, 'UTF-8'))" disable-output-escaping="yes"/>
</xsl:variable>
<xsl:for-each select="tokenize($text, '(\s+("|\(|\[|\{))|(("|,|;|:|\s\-|\)|\]|\})\s+)|((\.|\?|!|;)"?\s*)' )">
<xsl:choose>
<xsl:when test="string-length(.)>0">
<FRAGMENT>
<CONTENT>
<xsl:value-of select="."/>
</CONTENT>
<LENGTH>
<xsl:value-of select="string-length(.)"/>
</LENGTH>
</FRAGMENT>
</xsl:when>
<xsl:otherwise>
<FRAGMENT_COUNT>
<xsl:value-of select="last()-1"/>
</FRAGMENT_COUNT>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</TEXT>
</xsl:template>
当你看到构建的标签CONTENTS,LENGTH时,如果你知道我的意思,我想添加一个名为SEPARATOR的标签。我无法在互联网上找到任何答案,我只是一个xsl转换的初学者,所以我正在寻找一个快速的解决方案。提前谢谢。
答案 0 :(得分:3)
tokenize()函数不允许您发现分隔符是什么。如果您需要知道,则需要使用xsl:analyze-string
。如果你使用与tokenize()相同的正则表达式,则会传递&#34;令牌&#34;到xsl:non-matching-substring
指令和&#34;分隔符&#34;到xsl:matching-substring
指令。