xpath 1.0第一个和最后一个节点

时间:2015-07-22 12:06:13

标签: xml xslt xpath

如何使用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>

2 个答案:

答案 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中)丢弃除第一个之外的所有元素。