Como posso gerar XML com CR, em vez de CRLF no XMLTextWriter
-
26-09-2019 - |
Pergunta
Estou gerando XML via XMLTextWriter.
O arquivo parece bom aos meus olhos, valida (no WC3), e foi aceito pelo cliente.
Mas um fornecedor de clientes está reclamando que os finais de linha são CRLF, em vez de apenas Cr.
Bem, estou em uma máquina Win32 usando C#, e o CRLF é o final de linha padrão do Win32. Existe alguma maneira de alterar as finais de linha no XMLTextWriter?
Além disso-as finais de linha não devem não importar para um analisador XML adequado?
Veja também: O que são o retorno do carro, o alinhamento e o feed de formulário?
Nota: Parece que a única resposta é uma solução lateral - você precisa usar o XMLWriter em vez do XMLTextWriter
Solução
Claro, momentos depois de perguntar, encontro uma pista no msdn (que não consegui encontrar via Google) que se refere Xmlwritersettings.newlineChars
o que então me levou à resposta inacerada em SO: Escrevendo Xmldocument para Arquivo com Caráter Newline específico (C#)
Está tudo na terminologia .....
Outras dicas
Use o XMLWriterSettings para definir o que você deseja como seu final de linha.
XmlWriterSettings mySettings = new XmlWriterSettings();
mySettings.NewLineChars = "\r";
XmlWriter writer = XmlWriter.Create(
new StreamWriter(@"c:\temp\hello.xml", mySettings);
Não sei onde os personagens de fim de linha importam. Eu não encontrei isso antes.
Que final de linha é usado não deve importar para um analisador devidamente implementado (ver a especificação), Cito (ênfase meu):
Para simplificar as tarefas dos aplicativos, o processador XML deve se comportar como se normalizasse todas as quebras de linha Em entidades analisadas externas (incluindo a entidade do documento) na entrada, antes da análise, traduzindo a sequência de dois caracteres #XD #XA e qualquer #XD que não seja seguido por #XA para um único caractere #XA.
Portanto, você deve ficar bem com a maneira como o tem agora. Você pode perguntar o que o fornecedor do cliente está realmente fazendo lá, é provável que eles estejam fazendo errado.
Use a propriedade XMLWriterSettings.NewlineChars.