1

これは、テキストを句読点や類似の文字で区切られたフラグメントにトークン化する 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>

構成されたタグ CONTENTS、LENGTH をご覧のとおり、SEPARATOR という名前のタグを追加したいと思います。インターネットでこれに対する答えが見つかりませんでした。私は xsl 変換の初心者なので、簡単な解決策を探しています。前もって感謝します。

4

1 に答える 1

3

tokenize() 関数では、セパレータが何であったかを発見することはできません。知る必要がある場合は、xsl:analyze-string代わりに使用する必要があります。tokenize() と同じ正規表現を使用すると、「トークン」がxsl:non-matching-substring命令に渡され、「セパレータ」が命令に渡されxsl:matching-substringます。

于 2012-04-26T08:17:44.827 に答える