如何使用 XPATH 创建包含特定次数的固定值的序列?
How to create a sequence that contains a fixed value a specific number of times using XPATH?
我可以使用表达式
重复一个值,在本例中为 0,重复特定次数
for $i in 1 to $vMax return 0
假设 $vMax 是一个整数,那么如果 $vMax 是 3,则返回的序列将是 (0,0,0)
但是,有没有更简单的或其他一些常规的方法来做到这一点?
您可以使用 simple map operator:
(1 to $vMax) ! 0
您可以将原始的 for 循环或更短的版本包装在一个函数中,然后调用该函数:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:local="local">
<xsl:function name="local:repeat">
<xsl:param name="item"/>
<xsl:param name="iterations" as="xs:integer"/>
<!--<xsl:sequence select="for $i in (1 to $iterations) return $item"/>-->
<xsl:sequence select="(1 to $iterations) ! $item"/>
</xsl:function>
<xsl:template match="/">
<xsl:sequence select="local:repeat(0,3)"/>
</xsl:template>
</xsl:stylesheet>
在 XPath 1.0 中,没有整数序列这样的数据类型,因此没有表达式可以产生这样的值。
在 XPath 2.0 中,它可以像 for $x in 1 to $n return 0
.
那样完成
在 XPath 3.0/3.1 中,它可以像 (1 to $n)!0
最好标记 XPath 问题以表明您使用的是哪个版本。
我可以使用表达式
重复一个值,在本例中为 0,重复特定次数for $i in 1 to $vMax return 0
假设 $vMax 是一个整数,那么如果 $vMax 是 3,则返回的序列将是 (0,0,0)
但是,有没有更简单的或其他一些常规的方法来做到这一点?
您可以使用 simple map operator:
(1 to $vMax) ! 0
您可以将原始的 for 循环或更短的版本包装在一个函数中,然后调用该函数:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:local="local">
<xsl:function name="local:repeat">
<xsl:param name="item"/>
<xsl:param name="iterations" as="xs:integer"/>
<!--<xsl:sequence select="for $i in (1 to $iterations) return $item"/>-->
<xsl:sequence select="(1 to $iterations) ! $item"/>
</xsl:function>
<xsl:template match="/">
<xsl:sequence select="local:repeat(0,3)"/>
</xsl:template>
</xsl:stylesheet>
在 XPath 1.0 中,没有整数序列这样的数据类型,因此没有表达式可以产生这样的值。
在 XPath 2.0 中,它可以像 for $x in 1 to $n return 0
.
在 XPath 3.0/3.1 中,它可以像 (1 to $n)!0
最好标记 XPath 问题以表明您使用的是哪个版本。