2017-04-25 113 views
0

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

+1

歡迎來到SO,@ user918368。你已經標記了xslt-1.0和-2.0,那麼你到底在使用什麼? iff 2.0那麼你可以刪除1.0標籤 –

+0

是的,我使用v2.0。謝謝 – user7918368

回答

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)將被取消,所以我沒有試圖實現這一點)。

由於您還想識別標點符號,因此我不確定標記化足夠了,即使使用分析字符串,也不是直接匹配並收集位置。也許別人有更好的主意。

+0

要添加到此答案,一些正則表達式方言可以選擇分割「單詞邊界」,但這是從一種語言到另一種語言高度變化的一種選擇,所以它不存在於XPath中,它旨在成爲國際化語言。如果您可以對「單詞」的含義提出明確的定義,那麼我們可以幫助您在代碼中實現該定義。 –

+0

好標記表達式。 –