based on XML::Struct 0.10