获取特定单词的位置
我是XSLT中的新成员,是否可以获取特定单词的位置?例如,我有这样一个数据:获取特定单词的位置
<Data>The quick brown fox jumps over the lazy dog!</Data>
我希望得到一个“棕色”,“上”,“狗”的位置和“!”。并且,以不同的输出名称存储它。像棕色的位置<foo>3</foo>
,在的位置<boo>6</boo>
,狗<hop>9</hop>
和!<po_df>10</po_df>
。可能吗?
如果你只想找的话,你可以使用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
)将被取消,所以我没有试图实现这一点)。
由于您还想识别标点符号,因此我不确定标记化足够了,即使使用分析字符串,也不是直接匹配并收集位置。也许别人有更好的主意。
要添加到此答案,一些正则表达式方言可以选择分割“单词边界”,但这是从一种语言到另一种语言高度变化的一种选择,所以它不存在于XPath中,它旨在成为国际化语言。如果您可以对“单词”的含义提出明确的定义,那么我们可以帮助您在代码中实现该定义。 –
好标记表达式。 –
欢迎来到SO,@ user918368。你已经标记了xslt-1.0和-2.0,那么你到底在使用什么? iff 2.0那么你可以删除1.0标签 –
是的,我使用v2.0。谢谢 – user7918368