你可以,但它并不像你希望的那样自动。它会是这样的:
<xsl:apply-templates select="td:Benutzer_zu_POI[
td:PID = '400639' or
td:PID = '400929' or
td:PID = '401184' or
td:PID = '401006' or
td:PID = '430003408' or
td:PID = '401519' or
td:PID = '400660' or
td:PID = '500287' or
td:PID = '200461' or
td:PID = '400756']">
<xsl:sort select="string-length(
substring-before(
'|400639|400929|401184|401006|...|400756|',
concat('|', td:PID, '|')))"
data-type="number" />
</xsl:apply-templates>
为了解释这是如何工作的,目的是根据项目的顺序产生较小的数字作为选择的结果。例如,对于 400639,计算结果为:
string-length(
substring-before(
'|400639|400929|401184|401006|...|400756|',
'|400639|'))
string-length('')
0
对于 401184,它是
string-length(
substring-before(
'|400639|400929|401184|401006|...|400756|',
'|401184|'))
string-length('|400639|400929')
14
等等。
concat() 的目的是分隔管道符号中的值以防止部分匹配。如果我们没有使用 concat(),你可能会遇到这样的情况:
(assume td:PID = 456)
string-length(
substring-before(
'|123456|234567|34567|456|',
'456'))
string-length(
'|123')
4
这意味着 456 将被放置在 23456 和 34567 之前,而实际上它应该在它们之后。当它被分隔符包围时,这不会发生:
string-length(
substring-before(
'|123456|234567|34567|456|',
'|456|'))
string-length(
'|123456|234567|34567')
20