Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date Xquery比较数组中的日期值并获取最大日期值_Date_Xslt_Compare_Xquery - Fatal编程技术网

Date Xquery比较数组中的日期值并获取最大日期值

Date Xquery比较数组中的日期值并获取最大日期值,date,xslt,compare,xquery,Date,Xslt,Compare,Xquery,在我的xquery中,我有一个条件来检查数组中的(SP_TYPE_CD!=“”)和(EndDate的最大值),并返回满足此条件的EndDate 请求: `<CMS xmlns="*******************"> <CMSService> <CMSDetails AccountID="123456" CR="1000"> <SA_INFO_LIST>

在我的xquery中,我有一个条件来检查数组中的(SP_TYPE_CD!=“”)和(EndDate的最大值),并返回满足此条件的EndDate

请求:

`<CMS xmlns="*******************">
     <CMSService>          
        <CMSDetails AccountID="123456" CR="1000">
           <SA_INFO_LIST>
              <SA_INFO_LISTRow SA_ID="3484598047" ServiceAgreementType="OOVRPAY" ServicePointType="" SP_TYPE_CD="" Status="60" StartDate="2018-09-27" EndDate="2018-09-27"/>
              <SA_INFO_LISTRow SA_ID="3486640145" ServiceAgreementType="OOVRPAY" ServicePointType="" SP_TYPE_CD="" Status="60" StartDate="2018-04-26" EndDate="2018-04-26"/>
              <SA_INFO_LISTRow SA_ID="3487463777" ServiceAgreementType="ERES" ServicePointType="3135182884" SP_TYPE_CD="RESE" Status="70" StartDate="2018-04-06" EndDate=""/>
              <SA_INFO_LISTRow SA_ID="3482685560" ServiceAgreementType="OOVRPAY" ServicePointType="" SP_TYPE_CD="" Status="60" 
           </SA_INFO_LIST>
        </CMSServiceDetails>
     </CMSService>
  </CMS>

除非查询支持模式,否则@endDate属性(原子化后)将是xs:untypedAtomic,max()函数将尝试将xs:untypedAtomic值转换为日期。您需要告诉查询处理器将这些值视为日期,您可以通过使查询模式感知或(更简单地说)通过显式转换来实现:

fn:max($SA_INFO_LISTRow/@EndDate/xs:date(.))
但是,您的查询还有其他问题。这种情况:

if (($SA_INFO_LISTRow/@SP_TYPE_CD) and fn:max($SA_INFO_LISTRow/@EndDate))
(更正后)只是询问是否存在一个最长日期,如果有任何日期,那么就会有一个最长日期,因此这是毫无意义的

另外,您说您正在查找@SP_TYPE_CD不等于“”的条目,但您的代码正在查找此属性存在的所有条目,而不管其值如何

我猜您实际上想要@SP_TYPE_CD不等于“”的所有条目的最大结束日期,这将是(替换整个查询)


{max(//SA_INFO_LISTRow[@SP_TYPE_CD!='']/@EndDate/xs:date(.))

谢谢你,迈克尔。我完全删除了if条件,并尝试了您提到的语句。但我收到错误消息第21行第74列:{}FORG0001:::强制转换/构造函数的值无效:{}日期:错误:日期:无效的日期值:错误类型:如果我更正了If语句和xquery:for$StartServiceAllowedResponse中的$SA_INFO_列表行/ns2:CMServiceAgreementByAccountSearchService/ns2:CMServiceAgreementByAccountSearchServiceDetails/ns2:SA_INFO_列表行返回If(($SA_INFO_列表行/@SP_type_CD)!=“”)和fn:max(xs:string($SA_INFO_LISTRow/@EndDate)))然后{max($SA_INFO_LISTRow[@SP_TYPE_CD!='')/@EndDate/xs:date(.)}else()。它会运行,但结果会返回所有日期,其中SP_TYPE_CD!=''。这不是最大日期。我使用的是xquery1.0,我没有注意到有些@EndDate值实际上不是日期。我不认为我可以给你更多的代码,除非你提供一个更精确的规范。
fn:max($SA_INFO_LISTRow/@EndDate/xs:date(.))
if (($SA_INFO_LISTRow/@SP_TYPE_CD) and fn:max($SA_INFO_LISTRow/@EndDate))
    <ns1:date>
      {max(//SA_INFO_LISTRow[@SP_TYPE_CD != '']/@EndDate/xs:date(.))}
    </ns1:date>