Xml 如何在对其中一个元素进行值检查后返回元素值

Xml 如何在对其中一个元素进行值检查后返回元素值,xml,xpath,xpath-2.0,Xml,Xpath,Xpath 2.0,我想使用XPath2.0获取距离小于1的id和距离。 这就是我能走多远 <routes> <drivinginstruction> <start>SA5 9BZ, UK</start> <end>CF2 5RF, UK</end> <time>2 hours, 12 minutes</time> <total_distanc

我想使用XPath2.0获取距离小于1的id和距离。 这就是我能走多远

<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>
这将返回0。 谁能帮忙吗

关于Paul。

问题在于@value引用了XML中不存在的名为“value”的属性。你想用。而是获取元素的值。无论如何,您可以在没有if的情况下实现这一点,只需XPath谓词:

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

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

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

根据har07给我的建议,我对他的答案做了一点修改,因为它不会在PathEnq的完整xml中给出结果。 下面是最后一个有效的XPath2.0查询

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

感谢每一位提供意见的人。

完成了//routes//step[./distance给了我以下错误。SaxonCE.XSLT20Processor 11:01:12.740严重:invokeTransform中的XPathException:Required item type为'@Finchy70'的第一个操作数,所以如果距离小于1,则返回id和distance,否则返回0,否则不返回任何内容?可以发布预期的输出吗?只返回id和distance即可如果距离小于1,则不要返回任何其他内容。使用PathEnq运行xpath 2.0指令时,我没有得到任何结果,但也没有错误。有一些打字错误,您可以尝试更新的xpath吗?它在链接的演示站点中工作。我包含了完整的xml。当我添加完整的xml数据集时,它对我不起作用。@Finchy70检查更新情况行动
/routes/drivinginstruction/step[number(distance)][distance < 1.0]/(id|distance)
/routes/drivinginstruction/step/distance[number(.)< 1]/../(id|distance)