2017-11-20 9 views
0

"commaspacealphabet"に基づいてコンテンツ要素内の文字列をトークン化する必要があります。xslt正規表現パターンを使用して、commaspacealphabetに基づいて文字列をトークン化します。

<content>ss 2(2)(b), 3, Sch 2 line 10, 20,30, paras 10 div 10, 2 , 3</content> 

以下に、予想される出力について述べました。

<content><sub>ss 2(2)(b), 3</sub><sub>Sch 2 line 10, 20,30</sub><sub>paras 10 div 10, 2 , 3</sub></content> 

いずれかは、私が

答えて

0

1つの方法として、正規表現,\s+([A-Za-z])を使用して区切り文字と一致するようにanalyze-substringを使用することができます。ただし、キャプチャされた一致が2回書き込まれた区切り文字を出力します。

同じ正規表現を使用して結果をtokenizeとすると、式を分割して重複した文字を削除して元の状態に戻すことができますが、その周囲にはsubタグが付いています。

この要素に適用すると、次の

<content>ss 2(2)(b), 3, Sch 2 line 10, 20,30, paras 10 div 10, 2 , 3</content> 

...

<xsl:template match="content"> 
    <xsl:variable name="first"> 
     <xsl:analyze-string select="." regex=",\s+([A-Za-z])"> 
     <xsl:matching-substring> 
      <xsl:value-of select="."/><xsl:value-of select="regex-group(1)" /> 
     </xsl:matching-substring> 
     <xsl:non-matching-substring> 
      <xsl:value-of select="."/> 
     </xsl:non-matching-substring> 
     </xsl:analyze-string> 
    </xsl:variable> 
    <xsl:copy> 
     <xsl:for-each select="tokenize($first, ',\s+[A-Za-z]')"> 
      <sub><xsl:value-of select="." /></sub> 
     </xsl:for-each> 
    </xsl:copy> 
    </xsl:template> 

このテンプレートをお試しくださいは感謝出力

<content><sub>ss 2(2)(b), 3</sub><sub>Sch 2 line 10, 20,30</sub><sub>paras 10 div 10, 2 , 3</sub></content> 
0

は、私はあなたがコンマは次の非空白文字がアルファベットの場合にだけ、セパレータとして機能させたいと考えて右だろう手助けしてみてください? (もしそうなら、そう言って人生を楽にしたのはなぜですか?)

あなたはXSLT 2.0を使用していますか?もう一度、あなたの質問にタグを付けてください。

tokenize()を使用するのは、XPath 2.0の正規表現にキャプチャしない先読み構造がないので難しいです。

だから私は試してみてください:

<sep>要素の最初の文字で <sub>要素をマージして第二のパスが続い
<xsl:analyze-string select="." regex=",\s*\P{L}"> 
    <xsl:matching-substring> 
    <sep><xsl:value-of select="."/></sep> 
    </xsl:matching-substring> 
    <xsl:non-matching-substring> 
    <sub><xsl:value-of select="."/></sub> 
    </xsl:matching-substring> 
</xsl:analyze-string> 

を。

おそらくもっと良い方法がありますが、これは簡単な最初の試みです。

+0

です。しかし、文字列は異なる場合があります。いずれかのアルファベットで始まります。 – Reegan

+0

これ以上の時間を費やしたい場合は、より詳細な仕様を作成する必要があります。私が言ったように、私はあなたが望んでいたものを推測していましたが、あなたのコメントはそれをより明確にしません。 –

関連する問題