我有如下所示的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:date
s,您不需要也不应该使用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