我有一个 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 2 及更高版本中,您可以使用
<xsl:variable name="max" select="max(//topic/@version[. < $ver])"/>
,然后选择 //topic[@version = $max]
。