detach the handling of XMArray, XMRow and XMCell in a single pass, use the recursive descent instead