e se vc criasse um campo para o XML "documento" nao importando se é CPF ou CNPJ, uma vez precisei fazer algo parecido tive que ajustar os dois campos para ser 1 so e o que diferenciava o CPF do CNPJ era o numero 1 para CPF e 2 para CNPJ comum total de 15 digitos , ficando entao 100003507242926 para um CPF e 276484013000145 para CNPJ, ai eu tratava apenas o primeiro caracter com um substr()
e ai entao realizava a função