xslt 2.0を使用して不規則な内容のXMLファイルから文字列をソートしようとしています。XSLT v2.0、xsl:部分文字列ではなく正規表現で並べ替えますか?
リストは、「担当者」の直後の番号に従って注文する必要があります。そして「Nr。」の直後にある数字は無視されます(Tit。、Bd。など)。ここで
は、XML内の文字列の例をいくつか示しています
<a>I. HA Rep. 90, Nr. 45203</a>
<a>Rep. 89 Nr. 17750</a>
<a>I. HA Rep. 77, Tit. 500 Nr. 42 Bd. 5</a>
<a>I. HA Rep. 77, Tit. 500 Nr. 43 Adhibendum</a>
<a>I. HA Rep. 77 Tit. 343a Nr. 142 Bd. 7</a>
<a>I. HA Rep. 97 Nr. 5285</a>
リストは次のようになります。
<a>I. HA Rep. 77, Tit. 500 Nr. 42 Bd. 5</a>
<a>I. HA Rep. 77, Tit. 500 Nr. 43 Adhibendum</a>
<a>I. HA Rep. 77 Tit. 343a Nr. 142 Bd. 7</a>
<a>Rep. 89 Nr. 17750</a>
<a>I. HA Rep. 90, Nr. 45203</a>
<a>I. HA Rep. 97 Nr. 5285</a>
私はXSLTでこれを書いた:
<xsl:sort select="concat(format-number(number(substring-before(substring-after(a, 'Rep. '),', Nr.')),'000'),format-number(number(substring-after(a, 'Nr. ')),'0000000000'))" data-type="number" />'
このしかし、最も一般的なケース(リストの最初のケース)の場合にのみ有効です。私は正規表現が必要なので、私はこれらの文字列のほぼ1000を持っていますが、私はfn:replace、fn:matchesまたはfn:tokenizeを使用する方法を理解できません。私はそれらのすべてを試しました。 fn:matchだけが真または偽を返します.fn:replaceは、2番目のパラメータ(3番目に必要)でxpathを許可します。おそらくfn:tokenizeを使用しますか?
私はこの簡単な問題に数時間を費やしてきました。この初心者には何かヒントがあります。ここで
:関数 'を使って数値を抽出します。 –
あなたは関数を必要とせず、XSLT 2.0では 'xsl:analyze-string'を' xsl:sort'の子として置くこともできます。 –