Olá Italo,
Realmente a questão do "p" já está ok, mas para conseguimos validar com sucesso no XML no validador de mensagens do site do Sefaz RS fizemos o seguinte:
Na function TNFeEnvEvento.Executar da unit ACBrNFeWebServices alteramos o código desta maneira:
Texto := '<?xml version="1.0" encoding="UTF-8" ?>';
Texto := Texto + '<procEventoNFe versao="' + NFeEventoNFe + '" xmlns="http://www.portalfiscal.inf.br/nfe">';
Texto := Texto + '<evento versao="' + NFeEventoNFe + '" xmlns="http://www.portalfiscal.inf.br/nfe">';
Leitor.Arquivo := FDadosMSG;
Texto := Texto + UTF8Encode(Leitor.rExtrai(1, 'infEvento', '', i + 1));
Texto := Texto + '</infEvento>';
Texto := Texto + '<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">';
Leitor.Arquivo := FDadosMSG;
Texto := Texto + UTF8Encode(Leitor.rExtrai(1, 'SignedInfo', '', i + 1));
Texto := Texto + '</SignedInfo>';
Leitor.Arquivo := FDadosMSG;
Texto := Texto + UTF8Encode(Leitor.rExtrai(1, 'SignatureValue', '', i + 1));
Texto := Texto + '</SignatureValue>';
Leitor.Arquivo := FDadosMSG;
Texto := Texto + UTF8Encode(Leitor.rExtrai(1, 'KeyInfo', '', i + 1));
Texto := Texto + '</KeyInfo>';
Texto := Texto + '</Signature>';
Texto := Texto + '</evento>';
Texto := Texto + '<retEvento versao="' + NFeEventoNFe + '">';
Leitor.Arquivo := FRetWS;
Texto := Texto + UTF8Encode(Leitor.rExtrai(1, 'infEvento', '', j + 1));
Texto := Texto + '</infEvento>';
Texto := Texto + '</retEvento>';
Texto := Texto + '</procEventoNFe>';
wProc.Add(Texto);
// wProc.Add('<?xml version="1.0" encoding="UTF-8" ?>');
// wProc.Add('<procEventoNFe versao="' + NFeEventoNFe + '" xmlns="http://www.portalfiscal.inf.br/nfe">');
// wProc.Add('<evento versao="' + NFeEventoNFe + '" xmlns="http://www.portalfiscal.inf.br/nfe">');
// Leitor.Arquivo := FDadosMSG;
// wProc.Add(UTF8Encode(Leitor.rExtrai(1, 'infEvento', '', i + 1)));
// wProc.Add('</infEvento>');
// wProc.Add('<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">');
// Leitor.Arquivo := FDadosMSG;
// wProc.Add(UTF8Encode(Leitor.rExtrai(1, 'SignedInfo', '', i + 1)));
// wProc.Add('</SignedInfo>');
// Leitor.Arquivo := FDadosMSG;
// wProc.Add(UTF8Encode(Leitor.rExtrai(1, 'SignatureValue', '', i + 1)));
// wProc.Add('</SignatureValue>');
// Leitor.Arquivo := FDadosMSG;
// wProc.Add(UTF8Encode(Leitor.rExtrai(1, 'KeyInfo', '', i + 1)));
// wProc.Add('</KeyInfo>');
// wProc.Add('</Signature>');
// wProc.Add('</evento>');
// wProc.Add('<retEvento versao="' + NFeEventoNFe + '">');
// Leitor.Arquivo := FRetWS;
// wProc.Add(UTF8Encode(Leitor.rExtrai(1, 'infEvento', '', j + 1)));
// wProc.Add('</infEvento>');
// wProc.Add('</retEvento>');
// wProc.Add('</procEventoNFe>');
Com isso tiramos o "enter" que o stringlist adiciona ao final de cada linha e o XML funcionou no validador.
Grato pelo auxilio!