Xml 如何在对其中一个元素进行值检查后返回元素值
我想使用XPath2.0获取距离小于1的id和距离。 这就是我能走多远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
<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)