2017-04-25 23 views
0

私はXSLTで新しく、特定の単語の位置を得ることができるかどうか?例えば、私はこのようなデータを持っている:「!」特定の単語の位置を取得する

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

を私は「ブラウン」、「オーバー」、「犬」の位置とを取得したいです。そして、別の出力名でそれを格納します。 茶色の位置と同様以上の位置が<boo>6</boo><hop>9</hop>で、<foo>3</foo>です!<po_df>10</po_df>。出来ますか?

+1

ようこそ、@ user918368 xslt-1.0と-2.0の両方をタグ付けしていますので、正確に何を使用していますか? 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のように)私はそれを実装しようとしていないので、取得する必要があります。

句読点の文字を識別したいと思うので、私はトークンサイズが十分ではないと思っています。また、analyze-stringであっても、一致して位置を収集するのは簡単ではありません。たぶん誰かが良いアイデアを持っているかもしれません。

+0

この答えに追加するために、いくつかの正規表現の方言には "単語境界"を分割するオプションがありますが、これは言語間で非常に異なる変数なので、国際化を目的としたXPathには存在しません。 "単語"の意味を明確に定義することができれば、その定義をコードに実装するのに役立つでしょう。 –

+0

ニースのトークン式。 –

関連する問題