Apenas para relatar minhas experiências agora que coloquei a NFSe em produção para meus clientes... Por enquanto testei apenas em Porto Alegre (provedor BHISS).
Acho que não adianta tentarmos inserir quebras de linha no XML, pois é provável que os provedores removam esse tipo de coisa do mesmo. No meu primeiro teste com a NFSe, tentei montar uma tabelinha com algumas informações, formatando-a com sequências de espaços e quebras de linha. Quando o XML voltou da prefeitura, minhas sequências de espaços tinham se tornado um único espaço, e as quebras de linha sumiram.
Hoje eu estava experimentando um pouco mais com a discriminação do serviço. Percebi que na consulta online de uma NF que enviei, o provedor interpretou o caractere pipe ("|") como quebra de linha, como pode ser visto na imagem abaixo:
Infelizmente, acredito que isso seja arbitrário e que não sejam todos os provedores que fazem isso. Sendo assim, não posso me basear nesse método, já que minha empresa atende todo o Brasil.
Portanto, já que não existe um padrão entre os provedores, pretendo implementar o seguinte no meu sistema (assumindo que o DANFSe será gerado (principalmente) pelo meu sistema):
Vou criar símbolos a serem inseridos onde eu quero ter quebra de linha, TAB, espaços, etc
Exemplos, ainda não testados (é possível que alguns provedores removam alguns destes do XML):
quebra de linha = "</br>"
tab = "</tab>"
4 espaços = "</esp=4>"
Na hora de gerar o relatório do DANFSe, basta interpretar estes símbolos e formatar a discriminação de acordo
Claro que essa proposta irá deixar bem esquisito os DANFSes gerados pelos sites dos provedores. No meu caso, como meus clientes irão quase sempre gerá-lo pelo meu sistema, isso não é um grande problema.
Se alguém tiver sugestões/críticas ou se interessar pela minha solução, entre em contato e eu posso ver se disponibilizo as rotinas quando estiverem prontas.
---
Ricardo Godoy de Oliveira