我必须提取多个节点之间的最早日期,并将其放入新的xml中。
基于另一个线程(抱歉,我找不到url)我进行了以下查询:
substring-before(string(/*[local-name()='EmployeeUDM_Response']/*[local-name()='Return']/*[local-name()='Employee']/*[local-name()='Contracts']/*[local-name()='Contract']/*[local-name()='EmployementStartDate'][not(. >= following::*[local-name()='EmployementStartDate'])][not(. >= preceding::*[local-name()='EmployementStartDate'])][1]), 'T')
XML输入
<ns0:EmployeeUDM_Response xmlns:ns0="http://Schemas/v2/EmployeeUDM">
<ns0:Header Type="Employee" Source="Biztalk ESB" Target="EmployeeUDMToRostarCas" Date="2019-04-29T15:24:24" />
<ns0:Return>
<ns0:Employee>
<ns0:ID>f416d1cd-d13f-433c-9297-7fa724b10872</ns0:ID>
<ns0:Number>200002</ns0:Number>
<ns0:SagaNumber></ns0:SagaNumber>
<ns0:SocialSecurityNumber>663993258</ns0:SocialSecurityNumber>
<ns0:SurNameFull>Streep</ns0:SurNameFull>
<ns0:FirstName>Meryl</ns0:FirstName>
<ns0:Gender>Vrouw</ns0:Gender>
<ns0:DateOfBirth>1988-02-25T00:00:00.0000000+01:00</ns0:DateOfBirth>
<ns0:Contracts>
<ns0:Contract>
<ns0:ID>9cfae674-da54-418c-9d7f-2f1dfcdc64d3</ns0:ID>
<ns0:StartDate>2018-01-01T00:00:00.0000000+01:00</ns0:StartDate>
<ns0:EndDate>2019-01-01T00:00:00.0000000+01:00</ns0:EndDate>
<ns0:EmployementStartDate>2018-02-01T00:00:00.0000000+01:00</ns0:EmployementStartDate>
<ns0:EmployementEndDate>2018-03-01T00:00:00.0000000+01:00</ns0:EmployementEndDate>
</ns0:Contract>
<ns0:Contract>
<ns0:ID>a584c7d8-a5a1-45a7-9cb9-4dabe9ece851</ns0:ID>
<ns0:StartDate>2018-01-01T00:00:00.0000000+01:00</ns0:StartDate>
<ns0:EndDate>2019-01-01T00:00:00.0000000+01:00</ns0:EndDate>
<ns0:EmployementStartDate>2019-02-01T00:00:00.0000000+01:00</ns0:EmployementStartDate>
<ns0:EmployementEndDate>2019-03-01T00:00:00.0000000+01:00</ns0:EmployementEndDate>
</ns0:Contract>
<ns0:Contract>
<ns0:ID>9a1cfe04-6d4a-4a97-9104-b2633dbb6362</ns0:ID>
<ns0:StartDate>2018-01-01T00:00:00.0000000+01:00</ns0:StartDate>
<ns0:EndDate>2019-01-01T00:00:00.0000000+01:00</ns0:EndDate>
<ns0:EmployementStartDate>2017-02-01T00:00:00.0000000+01:00</ns0:EmployementStartDate>
<ns0:EmployementEndDate>2017-03-01T00:00:00.0000000+01:00</ns0:EmployementEndDate>
</ns0:Contract>
<ns0:Contract>
<ns0:ID>b7f868fe-2b93-45a4-9683-d814e3b6eb4e</ns0:ID>
<ns0:StartDate>2018-01-01T00:00:00.0000000+01:00</ns0:StartDate>
<ns0:EndDate>2019-01-01T00:00:00.0000000+01:00</ns0:EndDate>
<ns0:EmployementStartDate>2016-02-01T00:00:00.0000000+01:00</ns0:EmployementStartDate>
<ns0:EmployementEndDate>2016-03-01T00:00:00.0000000+01:00</ns0:EmployementEndDate>
</ns0:Contract>
<ns0:Contract>
<ns0:ID>4352ead7-8888-4c94-9228-dc0245ae9388</ns0:ID>
<ns0:StartDate>2019-01-01T00:00:00.0000000+01:00</ns0:StartDate>
<ns0:EndDate>2020-01-01T00:00:00.0000000+01:00</ns0:EndDate>
<ns0:EmployementStartDate>2019-01-01T00:00:00.0000000+01:00</ns0:EmployementStartDate>
<ns0:EmployementEndDate></ns0:EmployementEndDate>
</ns0:Contract>
<ns0:Contract>
<ns0:ID>8bf2208c-9f5d-4729-83d9-f10789913a61</ns0:ID>
<ns0:StartDate>2018-01-01T00:00:00.0000000+01:00</ns0:StartDate>
<ns0:EndDate>2019-01-01T00:00:00.0000000+01:00</ns0:EndDate>
<ns0:EmployementStartDate>2015-02-01T00:00:00.0000000+01:00</ns0:EmployementStartDate>
<ns0:EmployementEndDate>2015-03-01T00:00:00.0000000+01:00</ns0:EmployementEndDate>
</ns0:Contract>
<ns0:Contract>
<ns0:ID>c2d3b8e6-ccd5-4a18-b28a-f853e2bc8f0e</ns0:ID>
<ns0:StartDate>2018-01-01T00:00:00.0000000+01:00</ns0:StartDate>
<ns0:EndDate>2019-01-01T00:00:00.0000000+01:00</ns0:EndDate>
<ns0:EmployementStartDate>2014-02-01T00:00:00.0000000+01:00</ns0:EmployementStartDate>
<ns0:EmployementEndDate>2014-03-01T00:00:00.0000000+01:00</ns0:EmployementEndDate>
</ns0:Contract>
</ns0:Contracts>
</ns0:Employee>
</ns0:Return>
</ns0:EmployeeUDM_Response>
XML输出应为:
<ns0:Employee date="2019-04-30"http://SchemasMDSRequest_Schema">
<Number>200002</Number>
<SurNameFull>Streep</SurNameFull>
<FirstName>Meryl</FirstName>
<GivenName>Meryl</GivenName>
<EmployementStartDate>2014-02-01</EmployementStartDate>
<EmployementEndDate>2099-01-01</EmployementEndDate>
</ns0:Employee>
但是实际的XML输出是:
<ns0:Employee date="2019-04-30"http://SchemasMDSRequest_Schema">
<Number>200002</Number>
<SurNameFull>Streep</SurNameFull>
<FirstName>Meryl</FirstName>
<GivenName>Meryl</GivenName>
<EmployementStartDate>2018-02-01</EmployementStartDate>
<EmployementEndDate>2099-01-01</EmployementEndDate>
</ns0:Employee>
我不得不使用XPath 1.0,因为BizTalk Server 2013不支持XPath 2.0。 我不知道查询出了什么问题,我对XPath还是很陌生。
答案 0 :(得分:0)
XPath 1.0中的<
和>
运算符仅在数字上定义,而不在字符串(或日期/时间)上定义。如果在字符串上使用它们,系统将尝试将字符串转换为数字,通常会导致NaN < NaN
比较,但始终是错误的。
对于比较日期,一种流行的XPath 1.0解决方法是去除标点符号,然后比较数字说20190430和20190101。