Hola Miguel:
Tratar con XML implica algo más que sustituir los "&".
Te dejo un par de funciones de conversión que tienen lo mínimo y necesario para convertir a y desde XML.
FUNCTION NormalizarValorXML(tcTexto)
*-- NORMALIZA EL TEXTO INDICADO, COMPRIMIENDO LOS SÍMBOLOS XML ESPECIALES.
tcTexto = STRTRAN(tcTexto, CHR(38), CHR(38) + 'amp;') && reemplaza & por & &&
tcTexto = STRTRAN(tcTexto, CHR(39), CHR(38) + 'apos;') && reemplaza ' por ' &&
tcTexto = STRTRAN(tcTexto, CHR(34), CHR(38) + 'quot;') && reemplaza " por " &&
tcTexto = STRTRAN(tcTexto, '<', CHR(38) + 'lt;') && reemplaza < por < &&
tcTexto = STRTRAN(tcTexto, '>', CHR(38) + 'gt;') && reemplaza > por > &&
tcTexto = STRTRAN(tcTexto, CHR(13)+CHR(10), CHR(10)) && reeemplaza CR+LF por LF
tcTexto = CHRTRAN(tcTexto, CHR(13), CHR(10)) && reemplaza CR por LF
RETURN tcTexto
ENDFUNC
FUNCTION DesnormalizarValorXML(tcTexto)
*-- DESNORMALIZA EL TEXTO INDICADO, EXPANDIENDO LOS SÍMBOLOS XML ESPECIALES.
LOCAL lnPos, lnAscii
tcTexto = STRTRAN(tcTexto, CHR(38)+'gt;', '>') && >
tcTexto = STRTRAN(tcTexto, CHR(38)+'lt;', '<') && <
tcTexto = STRTRAN(tcTexto, CHR(38)+'quot;', CHR(34)) && "
tcTexto = STRTRAN(tcTexto, CHR(38)+'apos;', CHR(39)) && '
tcTexto = STRTRAN(tcTexto, CHR(38)+'amp;', CHR(38)) && &
DO WHILE .T.
lnPos = AT( CHR(38)+'#x', tcTexto )
IF lnPos = 0
EXIT
ENDIF
lnAscii = EVALUATE( '0' + SUBSTR( tcTexto, lnPos + 2, 3 ) )
tcTexto = STUFF(tcTexto, lnPos, 6, CHR(lnAscii)) && ASCII
ENDDO
RETURN tcTexto
ENDPROC
Saludos.-