2012-04-25 32 views
1

は、テキストを補間や類似の文字で区切られた断片にトークン化するXSLのコードです。私は何とかテキストがトークン化されたことにより、文字列をキャプチャする可能性がある場合、たとえば、カンマを頼むか、ドットしたいなどXSLT tokenize - 区切り文字のキャプチャ

<xsl:stylesheet version="2.0" exclude-result-prefixes="xs xdt err fn" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:err="http://www.w3.org/2005/xqt-errors" xmlns:xdt="http://www.w3.org/2005/xpath-datatypes"> 
<xsl:output method="xml" indent="yes"/> 
<xsl:template match="GENERUJ"> 
    <TEXT> 
     <xsl:variable name="text"> 
      <xsl:value-of select="normalize-space(unparsed-text(@filename, 'UTF-8'))" disable-output-escaping="yes"/> 
     </xsl:variable> 
     <xsl:for-each select="tokenize($text, '(\s+(&quot;|\(|\[|\{))|((&quot;|,|;|:|\s\-|\)|\]|\})\s+)|((\.|\?|!|;)&quot;?\s*)')"> 
      <xsl:choose> 
       <xsl:when test="string-length(.)&gt;0"> 
        <FRAGMENT> 
         <CONTENT> 
          <xsl:value-of select="."/> 
         </CONTENT> 
         <LENGTH> 
          <xsl:value-of select="string-length(.)"/> 
         </LENGTH> 
        </FRAGMENT> 
       </xsl:when> 
       <xsl:otherwise> 
        <FRAGMENT_COUNT> 
         <xsl:value-of select="last()-1"/> 
        </FRAGMENT_COUNT> 
       </xsl:otherwise> 
      </xsl:choose> 
     </xsl:for-each> 
    </TEXT> 
</xsl:template> 

あなたが構築したタグの内容がわかるように

、 LENGTH、私はあなたが私の言いたいことを知っていれば、SEPARATORと呼ばれるものを追加したいと思います。私はインターネット上でこれに対する答えを見つけることができませんでした。私は簡単な解決策を探していますので、xsl変換の初心者です。前もって感謝します。

+0

単純なサンプル入力と予想される出力を含めることができますか?それが立てば、あなたの質問は十分にはっきりしていません。 –

+0

一般的な点: ''を使用しないでください。代わりに ''を使用してください。それほど冗長ではないだけでなく、はるかに効率的です。 –

+0

うーん..入力(変数 "text")が '' blah blah blah、blah blah(blah blah)blah 'という形式のテキストファイルになり、 ' blah blah blah ... 'などと...あなたの提案を使用しようとしましたが、左にスクロールすると' disable-output-escaping = "yes"属性があります。私はエラーvhen私はそれを 'xsl:variable'タグに入れました –

答えて

3

tokenize()関数では、区切り記号の内容を検出できません。知っておく必要がある場合は、代わりにxsl:analyze-stringを使用する必要があります。 tokenize()と同じ正規表現を使用する場合は、xsl:non-matching-substring命令に「トークン」を渡し、xsl:matching-substring命令に「セパレータ」を渡します。

+0

' xsl:analyze-string'がどのように動作するかを数時間試していただき、ありがとうございました。 –

関連する問題