This is the result of converting a RTF via xx:node-set, I am stuck with
version 1.0, so as far as I understand I cannot use keys in the solution.

I have produced a working solution but it seems inelegant. I first select a
distinct list of @type using pre-Muenchian methods where the type doesn't
have a preceding-sibling of the same value. I then call a template by name
recursively whereby the first pass iterates through the distinct list using
for-each and selects the the first <item> that matches the type. This
template is then called again and does the same for the second matching item
and continues in the same fashion. The recursion stops after being called
sufficient times to ensure each item is matched once.