Bom dia Italo,
Bem, o problema do componente fazer a substituição duas vezes eu localizei. Veja se abaixo eu consigo explicar onde está o erro no componente.
1) na procedure TNFSeW.GerarXML_ABRASF_V1 da pnfsNFSeW.pas ele chama a função GerarTomador
2) Dentro da GeraTomador, temos a linha "Gerador.wCampoNFSe(tcStr, '#38', 'RazaoSocial', 001, 115, 0, NFSe.Tomador.RazaoSocial, '')", que acaba chamando a FiltrarTextoXML e gera a tag RazaoSocial formatada (já com o "&" substituído por "&").
3) Depois temos a "procedure TNotasFiscais.Assinar(AssinaRPS: Boolean = True)" da ACBrNFSeNotasFiscais.pas.
Nessa procedure temos a linha "FConfiguracoes."Geral.Save(NotaUtil.PathWithDelim(CaminhoArquivo) + Self.Items.NFSe.InfID.ID+'-Rps2.xml', LocNFSeW.Gerador.ArquivoFormatoXML)", que chama a função abaixo:
"function TGeralConf.Save(AXMLName: String; AXMLFile: WideString; aPath: String = ''): Boolean" da ACBrNFSeConfiguracoes.pas.
Nessa função save é executada a linha abaixo:
//..SILVIO/RODRIGO estamos trocando o & por causa de erro na abertura do arquivo XML - 06-02-2014
vSalvar.Text := StringReplace(vSalvar.Text, '&', '&', [rfReplaceAll]);
Com esta última rotina todo o conteúdo do xml passa NOVAMENTE pela substituição do caractere "&" por "&" .
Eu comentei essa linha vSalvar.Text := StringReplace(vSalvar.Text, '&', '&', [rfReplaceAll]) e aí gerou corretamente, ou seja, ao invés de substituir o "&" por "&" por "&", substituiu por "&". Mas o erro inicial de "unexpected character" e que gera a rejeição pelo web service permanece.
Obrigado!