2016-10-07 2 views
1

考えるとXML:d2-d1属性は差が小さいか等しい値に少なくとも1つのd子ノードを、持っている、すべてのcのノードを見つけるために、XPath 3.0を私がしている使用の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> 

30日。 d1およびd2の値は、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 v18XPath 3.0モードでXPath Builderを使用しています。 このエラーは、期間の設定が正しくないことが原因であると考えられます。 XPath 3.0では時間の長さをリテラルで指定する方法をアドバイスしてください。 ありがとう!

答えて

2

日付を差し引くことはできますが、次にdayTimeDurationが得られ、その値と比較する必要があります:/root/c[d[xs:date(@d2)-xs:date(@d1) <= xs:dayTimeDuration('P30D')]]

+1

そして、他の人の利益のために、XPath 3.0が必要なものは何もありません。必要なものはすべて2.0です。 –