获取特定单词的位置

时间:2017-04-25 09:24:26

标签: xslt xslt-2.0

我是XSLT的新手,是否可以获得特定单词的位置?例如,我有这样的数据:

<Data>The quick brown fox jumps over the lazy dog!</Data>

我希望得到一个&#34; brown&#34;,&#34; over&#34;,&#34; dog&#34;和&#34;!&#34;。并将其存储在不同的输出名称中。就像棕色的位置是<foo>3</foo>一样,的位置为<boo>6</boo> <hop>9</hop> <po_df>10</po_df>。有可能吗?

1 个答案:

答案 0 :(得分:1)

如果您只是在寻找单词,可以使用tokenize(., '\s+|\p{P}')

<xsl:template match="Data">
    <xsl:copy>
        <xsl:variable name="words" select="tokenize(., '\s+|\p{P}')"/>
        <xsl:for-each select="'brown', 'over', 'dog'">
            <matched item="{.}" at-pos="{index-of($words, .)}"/>
        </xsl:for-each>
    </xsl:copy>
</xsl:template>

给出了

<Data>
   <matched item="brown" at-pos="3"/>
   <matched item="over" at-pos="6"/>
   <matched item="dog" at-pos="9"/>
</Data>

所以它有正确的位置(我不确定你发布的元素的名称(如hop)在哪里,所以我没有尝试实现它。)。

由于你还想识别一个标点符号,我不确定tokenize是否足够,即使使用analyze-string也不能直接匹配和收集位置。也许别人有更好的主意。