我有一个我想与之交互的日期的事件的 XML 提要。
源 XML:
<?xml version="1.0" encoding="UTF-8"?>
<events>
<event>
<!-- various elements -->
<start_datetime value="2012-02-09 10:00:00"/>
<end_datetime value="2012-02-09 11:00:00"/>
<!-- various elements -->
</event>
<event>
<!-- various elements -->
<start_datetime value="2012-02-09 10:00:00"/>
<end_datetime value="2012-02-10 15:00:00"/>
<!-- various elements -->
</event>
<!-- other events -->
</events>
请注意,这/events/event[1]
是一个在同一天开始和结束的事件;/events/event[2]
,另一方面,跨越两天。这是我想要完成的:
- 对于同一天的事件,不要管日期时间,只需将这些属性转换为子元素。
- 对于跨越多天的事件,我想创建多个
<event>
元素,它们 (a) 与整体时间跨度相匹配,并且 (b) 在适当的情况下,跨越一整天的时间。
所以,我理想的 XSLT 会产生:
所需的 XML:
<?xml version="1.0" encoding="UTF-8"?>
<events>
<event>
<!-- various elements -->
<start_datetime>2012-02-09 10:00:00</start_datetime>
<end_datetime>2012-02-09 11:00:00</end_datetime>
<!-- various elements -->
</event>
<event>
<!-- various elements -->
<start_datetime>2012-02-09 10:00:00</start_datetime>
<end_datetime>2012-02-09 23:59:59</end_datetime>
<!-- various elements -->
</event>
<event>
<!-- various elements -->
<start_datetime>2012-02-10 00:00:00</start_datetime>
<end_datetime>2012-02-10 15:00:00</end_datetime>
<!-- various elements -->
</event>
<!-- other events -->
</events>
注意我的规则是如何得到满足的:
- 因为
/events/event[1]
发生在同一天,我们不理会它(除了将属性值更改为子元素的琐碎任务)。 /events/event[2]
跨越两天,这意味着它需要两个<event>
块(一个从开始日期时间到该日期的晚上 11:59:59,一个从结束日期的 00:00:00 到结束日期时间)。
最后的考虑:
这需要在 XSLT 1.0 中完成。
我不反对使用 EXSLT 的日期函数——但是,如果可以避免它们,那将是可取的。
清如泥?一如既往,感谢您的帮助。:)