например
repl([],Acc) -> lists:reverse(Acc);
repl([$&,$a,$m,$p,$;|T],Acc) -> repl(T,[$&|Acc]);
repl([H|T],Acc) -> repl(T,[H|Acc]).
проверка
repl("this is & ampersand",[]).
"this is & ampersand"
(обновление) Если вам нужно заменить все сущности из строки cdata, вы можете добавить фиктивный начальный тег вокруг этой строки и проанализировать егокак XML.
Вид:
{{_,_,_,_,_,_,_,_,Lst,_,_,_},_} =
xmerl_scan:string("<root>"++YourStingHere++"</root>"),
lists:foldl(fun ({_,_,_,_,X,text},Acc) -> Acc ++ X end, [],Lst).
проверка:
{{_,_,_,_,_,_,_,_,Lst,_,_,_},_} =
xmerl_scan:string("<root>"++"aaa V&H <- "++"</root>").
lists:foldl(fun ({_,_,_,_,X,text},Acc) -> Acc ++ X end, [],Lst).
"aaa V&H <- "