如何使用xpath 1.0语句仅选择第一个和最后一个节点?
Vehicle/Car[position() = 1]
正常工作
Vehicle/Car[position() = last]
正常工作
然而,当我尝试将它们放在一起时,它只会带回第一个结果并忽略第二个条件。 我已经厌倦了我认为应该工作的东西:
Vehicle/Car[position() = 1 or position() = last()]
但这只会带回第一个位置。
我也尝试了以下替代方案:
Vehicle/Car[position() = 1][position() = last()]
所有似乎都只返回第一个而不是第一个和最后一个。
根据要求添加* 示例输入和输出。
输入示例:
<Vehicle>
<Car>
<CarNumber>123</CarNumber>
</Car>
<Car>
<CarNumber>456</CarNumber>
</Car>
<Car>
<CarNumber>789</CarNumber>
</Car>
</Vehicle>
预期产出:
123789
实际输出:
123
XSLT:
<xsl:template match="/">
<xsl:value-of select="Vehicle/Car[position() = 1 or position() = last()]"/>
</xsl:template>
答案 0 :(得分:2)
而不是:
<xsl:template match="/">
<xsl:value-of select="Vehicle/Car[position() = 1 or position() = last()]"/>
</xsl:template>
尝试:
<xsl:template match="/">
<xsl:for-each select="Vehicle/Car[position() = 1 or position() = last()]">
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:template>
如前所述,在XSLT 1.0 xsl:value-of
中仅返回所选节点集中第一个节点的值。
答案 1 :(得分:1)
此表达式
Vehicle/Car[position() = 1 or position() = last()]
是对的。我怀疑问题在于你如何使用结果。也许您正在使用像xsl:value-of
这样的构造(在XSLT 1.0中)丢弃除第一个之外的所有元素。