如何 return 元素值作为这些元素之一的值检查的结果

How to return element values as a result of a value check of one of those elements

<routes>
    <drivinginstruction>
        <start>SA5 9BZ, UK</start>
        <end>CF2 5RF, UK</end>
        <time>2 hours, 12 minutes</time>
        <total_distance>429.83</total_distance>
        <step>
            <id>1</id>
            <instruction>Start out going SOUTHWEST on Unamed Road.</instruction>
            <distance>0.1</distance>
        </step> 
        <step>
            <id>2</id>
            <instruction>Turn LEFT onto Unamed Road.</instruction>
            <distance>0.2</distance>
        </step> 
        <step>
            <id>3</id>
            <instruction>Take the SECOND exit.</instruction>
            <distance>0.1</distance>
        </step> 
    </drivinginstruction>
</routes>

我想使用 xpath 2.0 获取距离 < 1 的 id 和距离。 这就是我的进展。

if (routes/drivinginstruction/step/distance[@value < 1.0]) then routes/drivinginstruction/step/(id|distance) else 0

这个returns0。 有谁能帮忙吗

问候保罗。

问题是 @value 引用了名为 'value' 的属性,该属性在您的 XML 中不存在。您想要使用 . 来获取元素的值。无论如何,你可以在没有 if 的情况下实现它,只需 XPath 谓词:

routes/drivinginstruction/step[distance < 1.0]/(id|distance)

demo

或使用 XPath 1.0 兼容版本:

routes/drivinginstruction/step[distance < 1.0]/*[self::id|self::distance]

更新

您的完整 XML 的问题可能是 distance 元素之一为空,与十进制数相比会导致错误。假设您不想从 distance 元素中 return 任何不包含有效数值的元素,那么您可以添加另一个谓词来检查它:

/routes/drivinginstruction/step[number(distance)][distance < 1.0]/(id|distance)

demo

根据 har07 给我的建议,我对他的回答做了细微的修改,因为它不会给我 PathEnq 中完整 xml 的结果。 这是有效的最终 Xpath 2.0 查询。

/routes/drivinginstruction/step/distance[number(.)< 1]/../(id|distance)

感谢所有提供意见的人。