2016-10-07 23 views
1

由於XML:的XPath 3.0比較日期diffrence具有持續時間的文字

<?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

Oxygen XML Editor v18使用XPath BuilderXPath 3.0模式。 我想這個錯誤是由於不正確的時間設置。請建議如何在XPath 3.0中將時間指定爲文字。 謝謝!

回答

2

您可以減去日期,但然後你得到dayTimeDuration,你需要比較這樣一個值:/root/c[d[xs:date(@d2)-xs:date(@d1) <= xs:dayTimeDuration('P30D')]]

+1

爲了他人的利益,這裏沒有任何需要XPath 3.0的東西 - 您需要的所有東西都在2.0中。 –