XSLT: Selecting nodes by comparing data AFTER conversion

R

Ryan Adler

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?
 
S

Soren Kuula

Ryan said:
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
 
F

fischer

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,534
Members
45,008
Latest member
Rahul737

Latest Threads

Top