我是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>
。可能嗎?
我是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