XPath 3.0将日期差异与持续时间字面值进行比较

时间:2016-10-07 15:39:43

标签: xml date xpath xpath-3.0

鉴于XML:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <c cid="0"> 
        <d did="c0d0" d1="2015-02-11" d2="2015-06-15" />
        <d did="c0d1" d1="2015-04-01" d2="2015-04-14" />
    </c>
    <c cid="1"> 
        <d did="c1d0" d1="2014-11-15" d2="2015-07-21" />
        <d did="c1d1" d1="2016-02-10" d2="2016-02-25" />
    </c>    
</root>

使用XPath 3.0我必须找到所有c个节点,这些节点至少有一个d子节点,d2-d1个属性值差异小于或等于30天。 d1d2值是YYYY-MM-DD格式的日期。 我试过XPath:

/root/c[d/xs:date(@d2)-d/xs:date(@d1)<=30]

但我得到了错误:

Cannot compare xs:dayTimeDuration to xs:integer

我在XPath Builder中以XPath 3.0模式使用Oxygen XML Editor v18。 我想这个错误是由于不正确的持续时间设置造成的。请在XPath 3.0中建议如何将持续时间指定为文字。 谢谢!

1 个答案:

答案 0 :(得分:2)

您可以减去日期,但之后会得到dayTimeDuration,您需要与这样的值进行比较:/root/c[d[xs:date(@d2)-xs:date(@d1) <= xs:dayTimeDuration('P30D')]]