ActiveResource uses xml_simple from activesupport to turn XML to essentially a big Hash or Array, after which point ActiveResource::Base's load() (actually find_or_create_resource_for, called from load) takes care of the remaining magic of building ActiveResource::Base instances to encapsulate the parsed XML data.
Currently, if you have some XML that looks roughly like this:
<my-model> <id type="integer">1</id> <some_attrib>blah blah</some_attrib> ... <related-entities> <related-entity> ... </related-entity> ... </related-entities> </my-model>
What happens is that you get an AR instance for my_model, in which you have an attribute called "related_entities" which is a Hash, and which contains a single attribute called "related_entity" which is an Array. This makes sense given xml_simple's parse/collapse/merge trickery, but seems counter-intuitive for ActiveResource. I'd rather expect to have an AR instance for my_model, with a "related_entities" attribute which is itself immediately an Array of related_entity AR children.