The root cause of this problem is the bad implementation of Hash::xml_node_to_hash, which exhibits inconsistent behavior:

x([node]) => obj
x([node, node]) => [obj, obj]

It should return array of results in both cases.

I have that issue on my list of things to fix. There's no good reason to place plugs throughout the code; instead, root cause should be fixed once and forever.