我是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>
。有可能吗?
答案 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也不能直接匹配和收集位置。也许别人有更好的主意。