入力: "abcdef$ghi$jklmno$pqrst$ wx $yx$"
期待される出力:
<tokens>
<token>$ghi$</token>
<token>$pqrst</token>
<token>$yx$</token>
</tokens>
入力文字列の例によると、出力は XSLT 1.0 を使用して期待される出力のようにする必要があります。
前もって感謝します
入力: "abcdef$ghi$jklmno$pqrst$ wx $yx$"
期待される出力:
<tokens>
<token>$ghi$</token>
<token>$pqrst</token>
<token>$yx$</token>
</tokens>
入力文字列の例によると、出力は XSLT 1.0 を使用して期待される出力のようにする必要があります。
前もって感謝します
ドル記号(1,2)、(3,4)、...(2× n -1、2× n )の各ペアに対して、ドル記号番号2× n -1との間のテキストを含むトークン要素が必要です。ドル記号番号2n。
2つのケースのうちの1つが必ず適用されます。
ケース1: nの固定された最大値があり、それは比較的小さい(たとえば、5または10未満)。この場合、適切な呼び出しを伴う単純な一連の割り当てxs:variable
で十分であり、これで完了です。最終的には次のようになります。substring-before
substring-after
ケース2:最大nはありません。token
この場合、XSLT 1.0の簡単なアプローチは、(a)最初のドル記号の前にサブ文字列をドロップし、(b)ドル記号、最初のドル記号の後、2番目のドルの前の文字列を含む要素を作成する名前付きテンプレートを作成することです。記号、および(c)2番目のドル記号の後のサブストリングを使用して自分自身を再帰的に呼び出します。空の文字列、ドル記号の数が奇数の文字列、およびその他の入力エラーに適切な境界条件を追加すれば、完了です。
つまり、XSLT 1.0の文字列関数を読んで、問題を解決してください。さらに問題が発生した場合は、戻ってきて(そしてあなたの作品を見せて)ください。
以下の xsl がお役に立てば幸いです。できます。私はそれを自分で試しました。
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:variable name="input">
<xsl:text>abcdef$ghi$jklmno$pqrst$ wx$yx$</xsl:text>
</xsl:variable>
<tokens>
<xsl:text> </xsl:text>
<xsl:analyze-string select="$input" regex="(\$[a-z]+\$)">
<xsl:matching-substring>
<token>
<xsl:value-of select="regex-group(1)"/>
</token>
<xsl:text> </xsl:text>
</xsl:matching-substring>
</xsl:analyze-string>
</tokens>
</xsl:template>
</xsl:stylesheet>