XPath:;“字符串列表”;除「;字符串“;?

XPath:;“字符串列表”;除「;字符串“;?,xpath,xpath-2.0,Xpath,Xpath 2.0,我正在使用XPath和XSLT(都是2.0版)。我想得到一个字符串列表,除了一个字符串: <xsl:param name="lang" select="'de'"/> <xsl:variable name="all-languages" select="('en','de','fr')"/> <xsl:variable name="other-languages" select="$all-languages except $lang "/> 对于文档项

我正在使用XPath和XSLT(都是2.0版)。我想得到一个字符串列表,除了一个字符串:

<xsl:param name="lang" select="'de'"/>
<xsl:variable name="all-languages" select="('en','de','fr')"/>
<xsl:variable name="other-languages" select="$all-languages except $lang "/>

对于文档项目,我想用
$lang
生成文档并链接到所有其他语言。因此,(在上面的示例中)将
$other languages
转换为
('de','fr')
,并使用
迭代语言,除了
$lang
中的字符串


除外
似乎仅适用于节点。对于这个问题,最好的解决方案是什么?

从所有语言中删除该语言似乎是个好主意:

remove($all-languages, index-of($all-languages, $lang)))

更简单、更高效

$all-languages[. ne $lang]

是的,更简单,但效率肯定不会更高。这需要通过计算表达式将每种语言与$lang进行比较,而的索引只能执行本机比较,直到找到第一个匹配项为止。@BeniBela,不是真的--
index-of()
需要对序列进行完整扫描。然后
remove()
执行另一次扫描。索引序列可能需要额外的内存。此答案中的表达式仅在一次扫描中计算,不需要任何额外内存。因此,我希望这个解决方案的速度大约是
remove。。。解决方案的索引。每个人都可以进行自己的实验。