Je ne vois pas comment

if ($cat2_id <> $cat1_id) {
et

if ($cat2_name <> $cat1_name) {
pourraient se comporter différemment pour le fragment de xml montré. Non ?