操作したい日付のイベントの 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]
、一方、2 日間にまたがります。これが私が達成したいことです:
- 同じ日のイベントの場合は、日時をそのままにして、それらの属性を子要素に変換するだけです。
<event>
複数日にまたがるイベントの場合、(a) 全体の期間に一致し、(b) 必要に応じて 1 日分の時間にまたがる複数の要素を作成したいと考えています。
したがって、私の理想的な 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]
つまり、2 つのブロックが必要<event>
です (1 つは開始日時からその日の午後 11:59:59 まで、もう 1 つは終了日の 00:00:00 から終了日時まで)。
最終的な考慮事項:
これは、XSLT 1.0 で実現する必要があります。
私は EXSLT の日付関数を使用することに反対しているわけではありません。
泥のように透明?いつもお世話になっております。:)