By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
434,795 Members | 1,251 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 434,795 IT Pros & Developers. It's quick & easy.

XSLT: Selecting nodes by comparing data AFTER conversion

P: n/a
I have a terrible headache from this problem. Perhaps someone can
help. My XML is formatted like this:

<events>
<event>
<starts-at>123456<starts-at/>
<event>
...
<events/>

The problem is, the starts-at field is actually a date-time, and I want
to get all events that have the same _time_, but could have different
dates. This means I first have to convert the data in that field, and
then compare it. I already have a template to convert the data to the
format I need, but how I can apply this template to all items, and then
get the items that have the same output? And how can I do this within
an XSLT page?

Jan 20 '06 #1
Share this Question
Share on Google+
2 Replies


P: n/a
Ryan Adler wrote:
I have a terrible headache from this problem. Perhaps someone can
help. My XML is formatted like this:

<events>
<event>
<starts-at>123456<starts-at/>
<event>
...
<events/>

The problem is, the starts-at field is actually a date-time, and I want
to get all events that have the same _time_, but could have different
dates. This means I first have to convert the data in that field, and
then compare it. I already have a template to convert the data to the
format I need, but how I can apply this template to all items, and then
get the items that have the same output? And how can I do this within
an XSLT page?

Seems to me like you have to make it a two-stager: First conversion,
then grouping. Alternatively, in XSLT2.0 you can save the conversion
result (of the whole doc) into a variable, and use that as input for 2nd
sweep.

Soren
Jan 21 '06 #2

P: n/a
The tool-box <xml>cmp provides a grouping-tool xmltoxml.sh, which also
can convert date-formats.

You need a basic-control-file and a toxml-control-file for executing
toxml.sh.

basic-control-file: cmp126.xml

<events>
<event ident_att_nr="true">
<starts_at
ident_text="true"
conv_text1_in="yyyy-MM-dd-HH:mm"
conv_text1_out="HH:mm"
conv_text1_class="de.sofika.test.ConvertDate"
/>
</event>
</events>

toxml-control-file: toxml126

<events>
<starts_at ident_att_time="true"
path_att_time="/events/event/starts_at">
<event ident_att_nr="true" />
</starts_at>
</events>

example-file: test126.xml

<events>
<event nr="1">
<starts_at>2006-10-20-09:00</starts_at>
</event>
<event nr="2">
<starts_at>2006-10-20-10:00</starts_at>
</event>
<event nr="3">
<starts_at>2006-10-21-09:00</starts_at>
</event>
<event nr="4">
<starts_at>2006-08-01-10:00</starts_at>
</event>
</events>
Executing the grouping produce this result:

$ xmltoxml.sh cmp126.xml toxml126.xml test126.xml
<events>
<starts_at time='09:00'>
<event nr='1'>
</event>
<event nr='3'>
</event>
</starts_at>
<starts_at time='10:00'>
<event nr='2'>
</event>
<event nr='4'>
</event>
</starts_at>
</events>

<xml>cmp has also a comparing, sorting and merging-tool.
See http://www.xmlcmp.com

Jan 31 '06 #3

This discussion thread is closed

Replies have been disabled for this discussion.