あなたの質問では、あなたが求めた順序はアルファベット順と一致しているため、プレーン<xsl:sort select="@result" />
は正しく機能するはずです。ただし、アルファベット以外の固定順序が必要な場合は、次のトリックを使用する傾向があります。
最初に変数の順序を定義します。エントリは、オプションの一部ではない文字で区切られます。
<xsl:variable name="sortOrder" select="'|Passed|Failed|Ignored|'" />
次に使用します
<xsl:sort data-type="number" select="string-length(
substring-before($sortOrder, concat('|', @result, '|')))" />
ここでのコツは、が Passed のsubstring-before($sortOrder, concat('|', @result, '|'))
場合は空の文字列、Failed の場合は文字列、 Ignoredの場合は文字列になることです。したがって、これらの文字列の長さで数値的にソートすると、 で与えられる順序が生成されます。@result
"|Passed"
@result
"|Passed|Failed"
@result
$sortOrder
concat
この特定のケースでは、必要さえありません。
<xsl:sort data-type="number" select="string-length(
substring-before($sortOrder, @result))" />
仕事をします。はconcat
、一般に、順序付けの 1 つの項目が別の項目の部分文字列である状況を処理するためにあります。たとえば'|Passed|Pass|Failed|Fail|'
、連結の順序付けが必要な場合、「合格」はその後で一貫してソートされるのではなく、「合格」と同じように扱われます。