XSLT:找到属性值“低于但最接近”我的输入值的节点

问题描述 投票:0回答:1

我有一个 XML,其中包含一系列具有版本属性的主题节点。版本控制是数字的。主题是链接的:我们有具有相同 ID 和不同版本的主题节点。

我想选择以下主题节点之一:版本最接近、等于或低于我的输入变量的主题。

XML:

<topics>
  <topic id="1" version="6"/>
  <topic id="1" version="3"/>
  <topic id="1" version="1"/>
</topics>

如果我的输入变量是7,我想选择version=“6”的主题。 如果我的输入变量是 6,我想选择 version="6" 的主题。 如果我的输入变量是 5,我想选择 version="3" 的主题。

这样的事情会起作用:

<xsl:variable name="ver" select="7"/>
<xsl:choose>
    <xsl:when test="//topic[@version = $ver]">
        <xsl:copy-of select="//topic[@version = $ver]">
    </xsl:when>
    <xsl:when test="//topic[@version = $ver -1]">
        <xsl:copy-of select="//topic[@version = $ver -1]">
    </xsl:when>
    ...
</xsl:choose>

但是我有 16 个“版本”值,并且将来还会有更多。有没有办法用不必枚举每个可能值的方法来替换此选择/何时?

(使用撒克逊语)

xslt
1个回答
1
投票

在 XSLT 2 及更高版本中,您可以使用

<xsl:variable name="max" select="max(//topic/@version[. &lt; $ver])"/>
,然后选择
//topic[@version = $max]

© www.soinside.com 2019 - 2024. All rights reserved.