0

当它找到一个或多个 PID 时,有没有办法让它按照 select 语句的顺序排序?

<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']">

非常感谢您的帮助!

4

2 回答 2

0

你可以,但它并不像你希望的那样自动。它会是这样的:

<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
于 2013-07-12T12:29:50.123 回答
0

这会奏效吗?

<xsl:apply-templates select="td:Benutzer_zu_POI[td:PID = '400639']/>
<xsl:apply-templates select="td:Benutzer_zu_POI[td:PID = '401184']/>
<xsl:apply-templates select="td:Benutzer_zu_POI[td:PID = '401006']/>
<xsl:apply-templates select="td:Benutzer_zu_POI[td:PID = '430003408']/>
<xsl:apply-templates select="td:Benutzer_zu_POI[td:PID = '401519']/>
<xsl:apply-templates select="td:Benutzer_zu_POI[td:PID = '400660']/>
<xsl:apply-templates select="td:Benutzer_zu_POI[td:PID = '500287']/>
<xsl:apply-templates select="td:Benutzer_zu_POI[td:PID = '200461']/>
<xsl:apply-templates select="td:Benutzer_zu_POI[td:PID = '400756']/>

(它是否等效取决于您的数据的详细信息,您没有向我们展示。您的版本将只显示每个 Benutzer 一次,即使它与多个 PID 匹配。)。

于 2013-07-12T13:29:57.830 回答