Edypu: En realidad en XML solo existen 5 caracteres especiales, no tendrías por qué sustituir vocales acentuadas (menos la diagonal), por ello utiliza una codificación UTF-8. En realidad tu código no le atina a ninguno :-s...
Tuna:

... y lo que mencionas no soluciona las & en atributos

.
Como decía, hay 5 caracteres especiales (entidadades) que deben ser remplazados:
-
& por
&
-
< por
<
-
> por
&qt;
-
" por
"
-
' por
'
Saluton