如何通过对其中一个元素的值检查返回元素值

时间:2017-10-24 09:30:58

标签: xml xpath xpath-2.0

<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来获取距离为&lt;的id和距离。 1。 这是我有多远。

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

返回0。 任何人都可以帮忙。

关心保罗。

2 个答案:

答案 0 :(得分:1)

问题在于@value引用名为&#39; value&#39;的属性在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元素返回任何不包含有效数字值的内容,那么您可以在之前添加另一个谓词来检查:

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

<强> demo

答案 1 :(得分:0)

使用har07给我的建议我对他的答案做了一些改动,因为它不会在PathEnq中给我完整的xml结果。 这是最终的Xpath 2.0查询。

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

感谢所有提供意见的人。