XSLT记号化 - 捕捉分离(XSLT tokenize - capturing the separ

2019-10-16 15:29发布

这里是在XSL一段代码其中一个标记化文本到由标点符号和类似字符分离的片段。 我想询问是否有可能以某种方式捕捉该文本被标记化的字符串,例如逗号或点等。

<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+(&quot;|\(|\[|\{))|((&quot;|,|;|:|\s\-|\)|\]|\})\s+)|((\.|\?|!|;)&quot;?\s*)' )">
            <xsl:choose>
                <xsl:when test="string-length(.)&gt;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>

正如你所看到的构建标签内容长度,我想补充一个叫分离器,如果你知道我的意思。 我不可能找到任何答案,这在互联网上,我只是一个XSL转换初学者,所以我正在寻找一个快速的解决方案。 先感谢您。

Answer 1:

该令牌化()函数不允许你去发现这些分离器。 如果你需要知道,你将需要使用xsl:analyze-string代替。 如果您使用相同的正则表达式作为记号化(),这可以通过“令牌”的xsl:non-matching-substring指令和“分离”的xsl:matching-substring指令。



文章来源: XSLT tokenize - capturing the separators