如何根据当前日期在xpath中给定的条件获得节点?



我有如下所示的XML树,我想从活动节点中提取一个属性,这里我根据节点的start_date和end_date计算活动节点。

<Parent>
<child>
<benefits_rate>0.0</benefits_rate>
<created_on_timestamp>2021-01-15T07:06:48.000Z</created_on_timestamp>
<custom_double6>3400.0</custom_double6>
<custom_string20>Yes</custom_string20>
<end_date>9999-12-31</end_date>
<event>12</event>
<event_reason>PAYOTH</event_reason>
<is_insider>false</is_insider>
<last_modified_by>sfadmin</last_modified_by>
<last_modified_on>2021-01-15T07:06:48.000Z</last_modified_on>
<pay_group>FZ</pay_group>
<seq_number>1</seq_number>
<start_date>2021-01-15</start_date>
</child>
<child>
<benefits_rate>0.0</benefits_rate>
<created_on_timestamp>2019-12-26T11:30:36.000Z</created_on_timestamp>
<custom_string20>No</custom_string20>
<end_date>2021-01-14</end_date>
<event>H</event>
<event_reason>HIRNEW</event_reason>                        
<is_insider>false</is_insider>
<last_modified_by>sfadmin</last_modified_by>
<last_modified_on>2019-12-26T11:30:36.000Z</last_modified_on>
<pay_group>FZ</pay_group>
<seq_number>1</seq_number>
<start_date>2009-12-01</start_date>
</child>
</parent> 
我提供的Xpath就像
//parent/child[xs:date(@start_date) le format-date(current-date(),  "[[[Y]-[M]-[D]]]") and  xs:date(@end_date) ge format-date(current-date(), "[[[Y]-[M]-[D]]]")]/event_reason

有人可以引导我这里,我做错了什么?

要比较xs:dates,您不需要也不应该使用format-date,只需对xs:date值使用比较运算符,例如//child[xs:date(start_date) le current-date() and xs:date(end_date) ge current-date()]/event_reason

您的XPath需要几个修复:

  • XPath是区分大小写的,所以使用Parent代替parent
  • start_date/end_date是子元素,但不是属性,所以不需要添加@
  • 日期格式中有额外的方括号:"[[[Y]-[M]-[D]]]"—>"[Y]-[M]-[D]"

工作表达式为

//Parent/child[date(start_date) le format-date(current-date(),  "[Y]-[M]-[D]") and date(end_date) ge format-date(current-date(), "[Y]-[M]-[D]")]/event_reason

最新更新